Java PhantomJS和HTMLUnitDriver在通过id/xpath查找元素时遇到问题
由于我的云环境没有安装Chrome/Firefox,但这两个驱动程序都有问题,因此尝试使用无浏览器解决方案。甚至连无头Chrome/Firefox解决方案也在寻找浏览器安装。我目前有许多不同的id/xpath组合用于自动测试,但PhantomJS和HTMLUnit似乎都找不到这些元素。我试图定位的这些元素是有角度的,似乎让事情变得有点困难 以下是我试图在页面上查找的示例HTML:Java PhantomJS和HTMLUnitDriver在通过id/xpath查找元素时遇到问题,java,angular,selenium,selenium-webdriver,xpath,Java,Angular,Selenium,Selenium Webdriver,Xpath,由于我的云环境没有安装Chrome/Firefox,但这两个驱动程序都有问题,因此尝试使用无浏览器解决方案。甚至连无头Chrome/Firefox解决方案也在寻找浏览器安装。我目前有许多不同的id/xpath组合用于自动测试,但PhantomJS和HTMLUnit似乎都找不到这些元素。我试图定位的这些元素是有角度的,似乎让事情变得有点困难 以下是我试图在页面上查找的示例HTML: <li ng-repeat="invoiceMenuItem in nav.invoiceMenu.menuI
<li ng-repeat="invoiceMenuItem in nav.invoiceMenu.menuItems" ng-class="{'active':invoiceMenuItem.selected}" id="invoiceMenuItem_4" style="" class="ng-scope ibm-active" role="presentation">
<a ng-click="nav.onSelectInvoiceMenuItem(invoiceMenuItem);$event.stopPropagation();" href="" class="ng-binding" role="tab" aria-selected="false" tabindex="-1" aria-label="Attachment Upload">Attachment Upload</a>
</li>
<a ng-click="nav.onSelectInvoiceMenuItem(invoiceMenuItem);$event.stopPropagation();" href="" class="ng-binding" role="tab" aria-selected="false" tabindex="-1" aria-label="Attachment Upload">Attachment Upload</a>
这里还有这个元素,它适用于HTMLUnit,但不适用于PhantomJS:
<li id="invoiceMenu" ng-show="nav.invoiceMenu.show" ng-class="{'active':nav.invoiceMenu.selected}" class="active" role="presentation">
<a ng-click="nav.onSelectInvoiceMenu();$event.stopPropagation();" role="tab" aria-selected="false" tabindex="-1" aria-label="Invoice">Invoice</a>
</li>
文本为附件上载的元素是一个角度元素,因此您必须使用预期条件将WebDriverWait诱导为元素,如下所示:
- 使用链接文本:
- 使用xpath:
文本为“发票”的元素也是一个角度元素,因此您必须使用预期条件将WebDriverWait归纳为元素,如下所示:
- 使用链接文本:
- 使用xpath:
Thread.sleep()连接的findElement()
调试代码代码>。如果你能找到元素并用观察结果更新问题。是的,它似乎永远找不到元素,只会超时等待它。这里的angular给这些非Chrome/Firefox的驱动程序带来了麻烦,这有什么问题吗?我放了好几根线;代码中的所有行都有帮助,但我仍然找不到这些特定元素。您能否具体说明您在线程“main”中与Thread.sleep()连接时看到的findElement()
异常的确切错误org.openqa.selenium.NoSuchElementException:无法找到ID为“invoiceMenuItem_4”或具有我尝试的任何ID/xpath组合的元素。我也尝试了相当长的睡眠时间。
<li id="invoiceMenu" ng-show="nav.invoiceMenu.show" ng-class="{'active':nav.invoiceMenu.selected}" class="active" role="presentation">
<a ng-click="nav.onSelectInvoiceMenu();$event.stopPropagation();" role="tab" aria-selected="false" tabindex="-1" aria-label="Invoice">Invoice</a>
</li>
driver.findElement(By.xpath("//ul[@class='tabs']//li[@id='invoiceMenu']")).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Attachment Upload"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//li[@class='ng-scope ibm-active']/a[@class='ng-binding' and @aria-label='Attachment Upload']"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Invoice"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//li[@class='active' and @id='invoiceMenu']/a[@aria-label='Invoice' and contains(.,'Invoice')]"))).click();