ไม่พบองค์ประกอบโดยใช้ซีลีเนียม โค้ดที่พัฒนาใน MVC

แนบโค้ดฉันไม่พบองค์ประกอบโดยใช้ Xpath รหัสได้รับการพัฒนาในกรอบงาน MVC รหัสมาจากมุมมองบางส่วน โปรดตรวจสอบภาพที่แนบมาและช่วยเหลือ

<html class=" js flexbox no-touch backgroundsize boxshadow  
csstransforms" style="">
 <head>
<body>
<header class="header header-waterfall affix-top">
<div class="menu-wrapper pull-left" role="navigation">
<ul class="nav nav1" role="menubar">
<li role="menuitem">
<a href="/th#">
<span class="icon icon-lg">menu</span>
</a>
<div id="menu_nav" class="mega-menu" role="menu" aria-hidden="true" 
style="">
</li>
</ul>
</div>
<div class="col-lg-3 col-md-3 col-sm-8 col-xs-8 pull-left">
<ul class="nav nav-list pull-right" style="padding: 6px 0px; cursor: 
pointer;">
</header>

พยายามด้วยบทบาท span, li เป็นต้น แต่ครั้งสูงสุดที่ฉันได้รับข้อผิดพลาดเช่น ไม่มีการโต้ตอบ

ล้มเหลว: testCheckFarmerData org.openqa.selenium.NoSuchElementException: ไม่สามารถค้นหาองค์ประกอบ: {"method": "xpath" "selector" // ul[@class= 'nav nav 1']/li/a/span" } ระยะเวลาคำสั่งหรือการหมดเวลา: 30.13 วินาที


person Suneel Kuppili    schedule 19.07.2016    source แหล่งที่มา
comment
แบ่งปันรหัสซีลีเนียมที่คุณลองแล้ว ....   -  person Saurabh Gaur    schedule 19.07.2016
comment
และคุณหมายถึงอะไรโดยไม่พบองค์ประกอบ??.. มีข้อยกเว้นอะไรบ้าง?? กรุณาแบ่งปันด้วยเช่นกัน   -  person Saurabh Gaur    schedule 19.07.2016
comment
โปรดดูภาพที่แนบมาสำหรับรหัสซีลีเนียม พยายามด้วย span, บทบาท li ฯลฯ แต่ครั้งสูงสุดที่ฉันได้รับข้อผิดพลาดเช่น ไม่มีการโต้ตอบ ล้มเหลว: testCheckFarmerData org.openqa.selenium.NoSuchElementException: ไม่สามารถค้นหาองค์ประกอบ: {method:xpath,selector://ul[@class= 'nav nav 1']/li/a/span} ระยะเวลาคำสั่งหรือการหมดเวลา: 30.13 วินาที   -  person Suneel Kuppili    schedule 19.07.2016
comment
พยายามทุกวิถีทางและเข้าหานักพัฒนาเขากล่าวว่ามันได้รับการพัฒนาในกรอบงาน MVC และเมนูด้านบนถูกดึงมาจากมุมมองบางส่วน   -  person Suneel Kuppili    schedule 19.07.2016


คำตอบ (1)


คุณควรลองใช้ WebDriverWait ดังนี้:-

WebDriverWait wait = new WebDriverWait(driver, 10);
el = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("menu")));
el.click();

แก้ไขแล้ว1 :- คุณสามารถดำเนินการ click ได้โดยใช้ JavascriptExecutor ดังต่อไปนี้:-

WebDriverWait wait = new WebDriverWait(driver, 10);
el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("menu")));
((JavascriptExecutor)driver).executeScript("arguments[0].click()", el);

แก้ไข2 :-

WebDriverWait wait = new WebDriverWait(driver, 10); 
el = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//ul[@cla‌​ss='nav nav1']/descendant::span[contains(.,'menu')]")));
((JavascriptExecutor)driver).executeScript("arguments[0].click()", el);

หวังว่ามันจะช่วยได้ .. :)

person Saurabh Gaur    schedule 19.07.2016
comment
มหัศจรรย์! มันกำลังทำงานในที่สุด ลำบากมา 2 วันแล้ว - person Suneel Kuppili; 19.07.2016
comment
มันไม่ทำงานใน FF เช่นกันใน Chrome ในบางครั้ง มันใช้งานได้เฉพาะใน IE เท่านั้น - person Suneel Kuppili; 19.07.2016
comment
@SuneelKuppili คุณหมายความว่าอย่างไรมันไม่ทำงานใน FF เช่นกันใน chrome บางครั้ง ?? มีข้อยกเว้นไหม?? - person Saurabh Gaur; 19.07.2016
comment
@SuneelKuppili หากมี timeOut คุณต้องเพิ่มเวลาจาก 10 วินาทีเป็นมากกว่านั้น .. - person Saurabh Gaur; 19.07.2016
comment
ฉันได้รับข้อผิดพลาดเดียวกันอีกครั้ง ฉันได้ลองเพิ่มเวลาเป็น 100ms แล้ว นี่เป็นข้อผิดพลาด: ล้มเหลว: testCheckFarmerData org.openqa.selenium.ElementNotVisibleException: องค์ประกอบไม่สามารถมองเห็นได้ (ข้อมูลเซสชัน: chrome=51.0.2704.103) (ข้อมูลไดรเวอร์: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),แพลตฟอร์ม=Windows NT 6.1.7601 เอสพี1 x86_64) (คำเตือน: เซิร์ฟเวอร์ไม่ได้ให้ข้อมูลสแต็กเทรซใด ๆ) ระยะเวลาหรือการหมดเวลาของคำสั่ง: 20 มิลลิวินาที - person Suneel Kuppili; 20.07.2016
comment
นี่เป็นข้อผิดพลาดกับไดรเวอร์ FF: ล้มเหลว: testCheckFarmerData org.openqa.selenium.ElementNotVisibleException: องค์ประกอบไม่สามารถมองเห็นได้ในขณะนี้และอาจไม่สามารถโต้ตอบกับระยะเวลาหรือการหมดเวลาของคำสั่ง: 34 มิลลิวินาที - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili หากคุณกำลังตรวจสอบเงื่อนไขการมองเห็น ข้อผิดพลาดนี้จะไม่โยน .. เนื่องจากรหัสที่ให้มาของฉันมักจะโยน TimeoutException หากเงื่อนไขการมองเห็นองค์ประกอบไม่เป็นความจริง .. อาจเป็นได้ว่าคุณกำลังจะค้นหาองค์ประกอบเป็น driver.findElement(By.linkText("menu")); นั่นคือเหตุผลที่คุณได้รับข้อยกเว้น .ลองด้วย WebDriverWait ตามที่ให้ไว้.. - person Saurabh Gaur; 20.07.2016
comment
ฉันใช้รหัสของคุณเท่านั้นที่ฉันไม่ได้เปลี่ยน ฉันเพิ่งเปลี่ยนเป็น Xpath แทนที่จะเป็น LinkText เช่น - WebDriverWait wait = new WebDriverWait(driver, 100); WebElement el = wait.until(ExpectedConditions.visibilityOfElementlocation(By.xpath(html/body/header/div[1]/ul/li/a/span))); el.คลิก(); - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili ฉันเข้าใจแล้ว .. คุณควรลอง ExpectedConditions.elementToBeClickable แทน ExpectedConditions.visibilityOfElementLocated เพราะ elementToBeClickable ตรวจสอบการมองเห็นและเปิดใช้งาน ... และหากไม่ประสบความสำเร็จ .. ลองใช้ JavascriptExecutor เพื่อดำเนินการคลิก .. ดูคำตอบที่อัปเดต ... หวังว่าจะช่วย .. :) - person Saurabh Gaur; 20.07.2016
comment
ขออภัย ใช้งานไม่ได้ เพิ่มความล่าช้าเป็น 60 เช่นกัน ไม่แน่ใจเกี่ยวกับพฤติกรรมของแอปพลิเคชัน เมื่อวานมันใช้งานได้ใน IE วันนี้มันใช้งานไม่ได้ นอกจากนี้ Chrome ยังทำงานไม่สอดคล้องกันเมื่อวานนี้ วันนี้มันทำงานแต่เช้า ตอนนี้มันไม่ทำงาน - person Suneel Kuppili; 20.07.2016
comment
การเริ่ม ChromeDriver 2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b) บนพอร์ต 47274 อนุญาตเฉพาะการเชื่อมต่อภายในเครื่องเท่านั้น ล้มเหลว: testCheckFarmerData org.openqa.selenium.ElementNotVisibleException: องค์ประกอบไม่สามารถมองเห็นได้ (ข้อมูลเซสชัน: chrome=51.0.2704.103) - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili คุณช่วยบอกฉันได้ไหมเมื่อเกิดข้อผิดพลาดนี้ระหว่างการค้นหาองค์ประกอบหรือระหว่างการคลิก ?? - person Saurabh Gaur; 20.07.2016
comment
และคุณได้ลอง By.linkText หรือ By.XPath เพื่อค้นหาหรือไม่ - person Saurabh Gaur; 20.07.2016
comment
ค้นหาองค์ประกอบ เพราะธาตุนั้นไม่ปรากฏให้เห็น หากพบองค์ประกอบก็สามารถคลิกได้ - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili ตกลงเมื่อใช้ ExpectedConditions.presenceOfAllElementsLocatedBy แล้วลองคลิกใช้ JavascriptExecutor เป็น WebDriverWait wait = new WebDriverWait(driver, 10); el = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//ul[@class='nav nav1']/descendant::span[contains(.,'menu')]"))); ((JavascriptExecutor)driver).executeScript("arguments[0].click()", el); แล้วแจ้งให้เราทราบ .. - person Saurabh Gaur; 20.07.2016
comment
ไม่สามารถบันทึกด้วยโค้ดด้านบนได้ บอกว่าไม่สามารถแมป Cp1252 ได้ อาจเป็นเพราะ:: - person Suneel Kuppili; 20.07.2016
comment
แต่ทำแบบทดสอบแล้ว.. มันล้มเหลว บอกว่า xpath ไม่ถูกต้อง SyntaxError: ล้มเหลวในการดำเนินการ 'ประเมิน' บน 'เอกสาร': สตริง '//ul[@cla??ss='nav nav1']/descendant::span[contains(.,'menu')]' ไม่ใช่ นิพจน์ XPath ที่ถูกต้อง (ข้อมูลเซสชัน: chrome=51.0.2704.103) (ข้อมูลไดรเวอร์: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),platform=Windows NT 6.1.7601 SP1 x86_64) (คำเตือน: เซิร์ฟเวอร์ไม่ได้ให้ข้อมูล stacktrace ใด ๆ) ระยะเวลาคำสั่งหรือ หมดเวลา: 16 มิลลิวินาที - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili เห็นการอัปเดต edited2..ใช้มัน... ข้อยกเว้นของคุณเกิดขึ้นเนื่องจาก '' คุณให้สิ่งเดียวกันทั้งภายในและภายนอก xpath .. ลองใช้ edited2ตอบแล้วแจ้งให้ทราบครับ - person Saurabh Gaur; 20.07.2016
comment
ไม่ ฉันได้ลองกับ 60 แล้ว ล้มเหลว: testCheckFarmerData org.openqa.selenium.TimeoutException: หมดเวลาหลังจาก 60 วินาทีเพื่อรอองค์ประกอบที่อยู่โดย: By.xpath: //ul[@cla??ss='nav nav1']/descendant::span[contains (.,'เมนู')] - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppilii มีช่วงปัจจุบันพร้อมข้อความ menu บนเพจของคุณหรือไม่? - person Saurabh Gaur; 20.07.2016
comment
ไม่มีช่วงอื่นที่มีเมนู - person Suneel Kuppili; 20.07.2016
comment
@SuneelKuppili เมนูหรือเมนู?? - person Saurabh Gaur; 20.07.2016
comment
@SuneelKuppili ในขณะที่คุณโพสต์ข้อยกเว้นบอกว่าหมดเวลาหลังจาก 60 วินาทีรอการปรากฏตัวขององค์ประกอบที่อยู่โดย: By.xpath: //ul[@cla??ss='nav nav1']/descendant::span[contains(.,' เมนู')] ในขณะที่ xpath ที่ถูกต้องคือ //ul[@class='nav nav1']/descendant::span[contains(.,'menu')]....ทำไมต้องผนวก ?? ด้วยคลาส...โปรดตรวจสอบด้วย - person Saurabh Gaur; 20.07.2016