Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法通过xpath选择并单击链接锚定标记,它将返回一个包含1个元素的数组_Java_Selenium Webdriver_Xpath - Fatal编程技术网

Java 无法通过xpath选择并单击链接锚定标记,它将返回一个包含1个元素的数组

Java 无法通过xpath选择并单击链接锚定标记,它将返回一个包含1个元素的数组,java,selenium-webdriver,xpath,Java,Selenium Webdriver,Xpath,输出: a=$x("//a[@title='Mapping & Enrichment']") 在索引0处,它具有链接和隐藏的照片元素 a-返回数组 对于上述html片段,是否可以使用xpath直接获取锚定标记 我在JavaTestNG类中使用以下代码来单击链接。它不起作用 控制台调试: a[0].click() --works fine Java控制台日志: 根据您提供的用于调用click on链接的HTML,使用文本作为映射和扩展,您需要诱导WebDriverWait,以使所需

输出:

a=$x("//a[@title='Mapping & Enrichment']")
在索引0处,它具有链接和隐藏的照片元素

a-返回数组

对于上述html片段,是否可以使用xpath直接获取锚定标记

我在JavaTestNG类中使用以下代码来单击链接。它不起作用

控制台调试:

a[0].click()  --works fine
Java控制台日志:


根据您提供的用于调用click on链接的HTML,使用文本作为映射和扩展,您需要诱导WebDriverWait,以使所需元素可单击,并且您可以使用以下解决方案:

JavaScript warning: http://XX.XX.XXX.XXX/XXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3a92fe8ea0%3afa31b949%3a19620875%3a874f8ea2%3af46195d3%3a490a9d4e%3abd8f85e4%3a7165f74%3a1e771326%3aa7e79140%3a2003d0b8%3aaa288e2d%3a258f1c72%3a58366029%3ab7778d6c%3ae085fe68%3ae330518b%3ac128760b%3ac8618e41%3ae4f8f289%3a1a73651d%3a333f8d94, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
JavaScript warning: http://XX.XX.XXX.XXX/XXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a1e771326%3ac8618e41%3a1a73651d%3a333f8d94%3a11a04f7e%3af46195d3%3a4cacbc31%3aaa288e2d%3a258f1c72%3a7165f74%3a874f8ea2, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
JavaScript warning: http://IP_XXXXXXXX/XXXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3a92fe8ea0%3afa31b949%3a19620875%3a874f8ea2%3af46195d3%3a490a9d4e%3abd8f85e4%3a7165f74%3ab7778d6c%3a2003d0b8%3a1e771326%3aaa288e2d%3a258f1c72%3a8674cba1%3a7c926187%3a2e42e72a%3aa51ee93e%3aef347303%3ac08e9f8a%3a2bef5fcc%3ae06b58fd%3ae085fe68%3aa9b7ace7, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 6324, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 6324, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_chann[Cehildl_win. 19cc, lin648, Chrome_Ce 346
hildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 19204, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 19204, Chrome_ChildThread] *** UTM:SVC TimerManager:registerTimer called after profile-before-change notification. Ignoring timer registration for id: telemetry_modules_ping
[GPU 19676, Chrome_ChildThread] WARNIN
###!!! [Child][MessageChannel::SendAndWait] Error: Channel error: cannot send/recv

从我们在评论中的对话来看,你似乎混淆了一些事情

在浏览器控制台中,执行$x将返回一个元素集合,因此$x.click不起作用,因为无法单击整个集合。如果使用数组表示法,则可以指定要单击的集合的成员,例如$x[0]。单击将单击集合中的第一个元素

要将其转换为Java/Selenium,driver.findElements复数形式相当于$x,因为它们都返回元素集合。如果使用driver.findElement singular,则即使找到多个元素,它也只返回第一个元素。因此,您可以使用driver.findElement.click安全,即使使用的定位器找到多个元素


如果要使用返回多个元素但不希望只获取第一个元素的定位器,可以使用.getx,其中x是要在集合中的元素的索引。例如,driver.findElements.get1将返回第二个元素0是第一个元素的索引,1是第二个元素的索引,依此类推。

您得到的异常是什么?这样您就可以找到链接,但无法单击它还是什么?它是隐藏的吗?它不工作意味着什么?请发布完整的错误消息或解释预期的行为是什么以及您看到了什么。嗨@Jeffc,我已经根据建议添加了额外的信息。您好@Andersson,我找不到这个链接,我已经用额外的信息更新了这个问题。请看一次。你的定位器太过具体和脆弱,所有的字符串都与类匹配,等等。我们甚至不知道错误消息是什么,你怎么知道等待会解决问题?
a[0].click()  --works fine
a=$x("(//a[@href='ProjectDimensionSetUp.aspx'])")
[a.rpLink]
  0: a.rpLinklength: 
  1__proto__: Array(0)

a=$x("(//a[@href='ProjectDimensionSetUp.aspx'])")[0]
<a href=​"ProjectDimensionSetUp.aspx" title=​"Project Dimensions" class=​"rpLink" target=​"ctl00_DefaultContent_radPaneProjectMaintContent">​…​</a>​
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("XPATH_TO_SELECT_ANCHOR_TAG_NOT_ARRAY_WITH_ANCHOR_TAG"))).click();
JavaScript warning: http://XX.XX.XXX.XXX/XXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3a92fe8ea0%3afa31b949%3a19620875%3a874f8ea2%3af46195d3%3a490a9d4e%3abd8f85e4%3a7165f74%3a1e771326%3aa7e79140%3a2003d0b8%3aaa288e2d%3a258f1c72%3a58366029%3ab7778d6c%3ae085fe68%3ae330518b%3ac128760b%3ac8618e41%3ae4f8f289%3a1a73651d%3a333f8d94, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
JavaScript warning: http://XX.XX.XXX.XXX/XXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a1e771326%3ac8618e41%3a1a73651d%3a333f8d94%3a11a04f7e%3af46195d3%3a4cacbc31%3aaa288e2d%3a258f1c72%3a7165f74%3a874f8ea2, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
JavaScript warning: http://IP_XXXXXXXX/XXXXXX/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=DefaultMasterScriptManager_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3a4ae4914f-8c8e-4123-9d05-414d87b48357%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2014.1.225.40%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3afe3df733-ee56-4563-8789-bc399360084a%3a16e4e7cd%3aed16cbdc%3af7645509%3a88144a7a%3a24ee1bba%3a92fe8ea0%3afa31b949%3a19620875%3a874f8ea2%3af46195d3%3a490a9d4e%3abd8f85e4%3a7165f74%3ab7778d6c%3a2003d0b8%3a1e771326%3aaa288e2d%3a258f1c72%3a8674cba1%3a7c926187%3a2e42e72a%3aa51ee93e%3aef347303%3ac08e9f8a%3a2bef5fcc%3ae06b58fd%3ae085fe68%3aa9b7ace7, line 2030: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 6324, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 6324, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_chann[Cehildl_win. 19cc, lin648, Chrome_Ce 346
hildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Parent 19988, Gecko_IOThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 19204, Chrome_ChildThread] WARNING: pipe error: 109: file z:/build/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 346
[Child 19204, Chrome_ChildThread] *** UTM:SVC TimerManager:registerTimer called after profile-before-change notification. Ignoring timer registration for id: telemetry_modules_ping
[GPU 19676, Chrome_ChildThread] WARNIN
###!!! [Child][MessageChannel::SendAndWait] Error: Channel error: cannot send/recv
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='rpLink rpExpandable  rpSelected' and @href='MappingAndEnrichmentSetUp.aspx']/span[@class='rpOut rpNavigation']//span[@class='rpText']"))).click();