Попытка сделать решение без браузера, поскольку в моей облачной среде не установлен Chrome / Firefox, но есть проблемы с обоими этими драйверами. Даже безголовые решения Chrome / Firefox все еще ищут установки браузера. В настоящее время у меня было много разных комбинаций id / xpath, работающих для моего автоматического тестирования, но и PhantomJS, и HTMLUnit не могут найти эти элементы. Эти элементы, которые я пытаюсь найти, расположены под углом и, кажется, усложняют ситуацию.
Вот пример HTML-кода, который я пытаюсь найти на странице:
<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>
Я пробовал все это, которые работают для Chrome / Firefox, но не PhantomJS / HTMLUnit:
driver.findElement(By.xpath("//li[@id='invoiceMenuItem_4']")).click();
driver.findElement(By.id("invoiceMenuItem_4")).click();
driver.findElement(By.xpath("/html[1]/body[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[2]/ul[1]/li[9]")).click();
driver.findElement(By.xpath("//*[contains(text(), 'Attachment Upload')]")).click();
driver.findElement(By.xpath("//li[@ng-class='active':invoiceMenuItem.selected']")).click();
Здесь также есть этот элемент, который работает для 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>
Вот одно из работавших решений, я пробовал другие комбинации, аналогичные тем, которые я использовал выше, и обычно у меня нет проблем с драйверами Chrome / Firefox.
driver.findElement(By.xpath("//ul[@class='tabs']//li[@id='invoiceMenu']")).click();