【发布时间】:2015-03-05 02:35:06
【问题描述】:
我正在尝试选择此链接“用户请求”。它在鼠标悬停在菜单上时出现。
它有这个 HTML
<ul class="k-widget k-reset k-header k-menu k-menu-horizontal" id="menu" data-role="menu" tabindex="0" role="menubar" aria-activedescendant="menu_mn_active">
...
<li class="k-item js-first-level k-state-default k-state-border-down" role="menuitem" style="z-index: 100;">
<span class="k-link js-first-level k-state-active k-state-border-down" target="">Reports/Analytics<span class="k-icon k-i-arrow-s"></span></span>
<div class="k-animation-container" style="width: 152px; height: 145px; margin-left: -2px; padding-left: 2px; padding-right: 2px; padding-bottom: 4px; overflow: visible; display: block; position: absolute; z-index: 10002; top: 27px; left: -2.703125px;">
<ul class="k-group k-menu-group k-popup k-reset k-state-border-up" role="menu" data-role="popup"
style="max-height: 578px; overflow: auto; display: block; font-size: 12px; font-family: 'Open Sans', sans-serif; font-stretch: normal; font-style: normal; font-weight: normal; line-height: normal; position: absolute; -webkit-transform: translateY(0px);">
<li class="k-item js-second-level k-state-default k-first" role="menuitem">
<a class="k-link js-second-level" href="..." target="">Reports / Analytics</a>
</li>
<li class="k-item js-second-level k-state-default" role="menuitem">
<a class="k-link js-second-level" href="..." target="">User Requested</a>
</li>
XPath
//*[@id="menu"]/li[10]/div/ul/li[2]/a
代码
echo "Switching to mainFrame\n";
$driver->switchTo()->frame("mainFrame");
echo "Finding link Reports/Analytics\n";
//$input = $driver->findElement(WebDriverBy::partialLinkText('Reports/Analytics')); #didn't work
$input = $driver->findElement(WebDriverBy::xpath('//*[@id="menu"]/li[10]/span'));
$input->click();
echo "Finding link User Requested\n";
// $input = $driver->findElement(WebDriverBy::partialLinkText('User Requested')); # didn't work
$input = $driver->findElement(WebDriverBy::xpath('//*[@id="menu"]/li[10]/div/ul/li[2]/a'));
$input->click();
错误
Switching to mainFrame
Finding link Reports/Analytics
Finding link User Requested
PHP Fatal error: Uncaught exception 'NoSuchElementException' with message 'no such element
似乎无论我尝试什么,它都行不通。该链接没有id。
我设法点击了 a 链接,但它选择了错误的链接!我正在使用 Chrome 右键单击元素以获取 CSS 路径和 XPath。 (某些 JavaScript 会在选择菜单时设置一个 id menu_mn_active。)元素显示文本是正确的,但它会转到错误的页面。
echo "Finding link User Requested\n";
// $input = $driver->findElement(WebDriverBy::partialLinkText('User Requested'));
// $input = $driver->findElement(WebDriverBy::cssSelector('#menu_mn_active > div > ul > li:nth-child(2) > a'));
// $input = $driver->findElement(WebDriverBy::xpath('//*[@id="menu"]/li[10]/div/ul/li[2]/a'));
$input = $driver->findElement(WebDriverBy::xpath('//*[@id="menu_mn_active"]/div/ul/li[2]/a'));
echo("Link text: ".$input->getText()."\n");
$input->click();
echo "Finding link Export Employees To Bamboo\n";
输出
Finding link User Requested
Link text: User Requested
Finding link Export Employees To Bamboo
PHP Fatal error: Uncaught exception 'NoSuchElementException'
我在尝试单击下拉菜单中的项目时也经常遇到此错误:
PHP Fatal error: Uncaught exception 'ElementNotVisibleException' with message 'element not visible
【问题讨论】:
-
我在您的 HTML 中看不到
id属性。 -
@zerkms
#menuid 在给定的 HTML 之前。我会添加它。<a>没有id。 -
如果您在 chrome 元素选项卡中使用
//*[@id="menu"]/li[10]/div/ul/li[2]/a选择器并尝试使用它进行搜索 - 它会找到任何东西吗? -
如果找不到 - 则没有匹配的元素。对于测试,我永远不会做你刚才所做的事情——所有的 xpath 都必须经过深思熟虑的编写,因为这就是你“保证”测试运行良好的方式。
-
@zerkms 好吧,我使用 Chrome 并右键单击元素并选择“复制 XPath”,这就是我获得 XPath 的方式。我不知道我可以使用 find 和 XPaths。实际上,当我使用完整路径时,它确实找到了 XPath。我无法选择 HTML,因为这是呈现的内容,我无法控制它。
标签: php html selenium xpath selenium-webdriver