【问题标题】:not able to select drop down in share point site using selenium webdriver无法使用 selenium webdriver 在共享点站点中选择下拉菜单
【发布时间】:2014-07-23 17:59:54
【问题描述】:

下面是html代码

<html dir="ltr" __expr-val-dir="ltr" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<body onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" scroll="yes">
<form id="aspnetForm" onsubmit="javascript:return WebForm_OnSubmit();" action="/Lists/Bedrifter/NewForm.aspx?RootFolder=%2FLists    %2FBedrifter&ContentTypeId=0x010089708C9D4BD6934C8E5AAD8CA5960372&Source=http%3A%2F%2Fbrbaker%2Eiqubes%2Ecom%2FLists%2FBedrifter    %2FAllItems%2Easpx" method="post" name="aspnetForm">
<div>
<script type="text/javascript">
<script type="text/javascript" src="/WebResource.axd?d=4d6EoZshmx02OmMScHE3DbHlrYbV8g3RhGO1crQQDRnSnV0ocSltu-   h2JR6NPXUrSq6UdfWCYI3o0DJF_ZfaK3a8coA1&t=634605546709717464">
<script>
<script language="JavaScript" type="text/JavaScript">
<script src="/_layouts/datepicker.js" language="javascript">
<script language="javascript">
<script language="javascript">
<script type="text/javascript">
<script type="text/javascript" src="/ScriptResource.axd?d=Lim-50lYe1ZDrlX4mMFL650sLf8k9DOdc77CA32d5iqCcwZgC0o44-JDQvjWVdOvFNhnh9Rv8ET6IZprG0J0- hy3RwAt6a8wzZYDlicHIDUEUV3EM6jVmf-3rAG4gzDt7vMtWA2&t=ffffffffe0ec361c">
<script type="text/javascript" src="/ScriptResource.axd?d=kzC4QkzPw8VSUFfZJOZJBiUuRCJh8hH4jceOz-aS9SoZHjrHyO0-  qLxFSc_CZdZWHipnmUwdugwDjjJUVkJPeY6Lu2n5NvmKbB5lpZ-yM3GAfcBKWP54a0try64gthczZoxjy1sDHJib8zf8iHnFyopgObE1&t=23ac280b">
<script type="text/javascript" src="/ScriptResource.axd?d=Glp6MnJF7a1dHB7t8aIwFln7LYIjT8Kl_yKq1264_-9QdU3Y7jwHZhcKumPfVlZ3bLuoCPjTZgTerzZfJQex- 7jEIxOZZewN1qSYBhLI3WDJOu1cpD5txPFEu4or9SHjqQ-3ZCDMbq-5NF6lo2Fvf-OSqgUnrMwO8kWZBqN8GlLP10qd0&t=23ac280b">
<script type="text/javascript" src="/WebResource.axd?d=xYoo8lVwQo4Vp8QZN5OAU9ZNIsutUO_7HeMk_xB4mc0J5qXChkZyGSQUm-   GEsHBbkeAr07Gg56nkgPJwAT9UisVxGYs1&t=634605546709717464">
<script type="text/javascript">
<div>
<script type="text/javascript">
<table class="ms-iqubes-body" width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="ms-globalbreadcrumb" colspan="4">
<td width="3%" valign="middle" style="padding-left:3px; padding-right:6px;">
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<tr>
<tr height="100%">
<td>
<table class="iqubes-background" width="100%" height="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<tr>
<td id="LeftNavigationAreaCell" class="ms-leftareacell" valign="top" height="100%">
<td>
<td class="ms-bodyareacell" valign="top">
<placeholder id="ctl00_MSO_ContentDiv">
<table id="MSO_ContentTable" class="ms-propertysheet" width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="ms-bodyareaframe" valign="top" height="100%">
<a name="mainContent"></a>
<script type="text/javascript" language="javascript">
<table id="onetIDListForm" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="MSOZoneCell_WebPartWPQ5" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0" toplevel="">
<tbody>
<tr>
<td valign="top">
<div id="WebPartWPQ5" style="" allowdelete="false" width="100%" haspers="false" webpartid="bac1b910-309d-4e46-47b4-0b8a052b0579">
<span id="part1">
<table id="ctl00_m_g_bac1b910_309d_4e46_47b4_0b8a052b0579_ctl00_toolBarTbltop" class="ms-formtoolbar" width="100%" border="0" cellspacing="0"   cellpadding="2">
<table id="ctl00_m_g_bac1b910_309d_4e46_47b4_0b8a052b0579_ctl00_ctl01_ctl00_toolBarTbl" class="ms-toolbar" width="100%" border="0" cellspacing="0"  cellpadding="2">
<table class="ms-formtable" width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 8px;">
<tbody>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<td class="ms-formlabel" width="190px" valign="top" nowrap="true">
<td class="ms-formbody" width="400px" valign="top">
<span dir="none">
<select id="ctl00_m_g_bac1b910_309d_4e46_47b4_0b8a052b0579_ctl00_ctl04_ctl15_ctl00_ctl00_ctl04_ctl00_Lookup" title="Parent company" name="ctl00$m   $g_bac1b910_309d_4e46_47b4_0b8a052b0579$ctl00$ctl04$ctl15$ctl00$ctl00$ctl04$ctl00$Lookup">
<br>           

我几乎使用了所有方法来选择下拉菜单,如下所示

 new Select(driver.findElement(By.xpath("//*[@id='ctl00_m_g_bac1b910_309d_4e46_47b4_0b8a052b0579_ctl00_ctl04_ctl15_ctl00_ctl00_ctl04_ctl00_Lookup']"))).selectByVisibleText("Baker Brazil");

我尝试了 id、name 等,但出现错误

org.openqa.selenium.NoSuchElementException: 找不到 xpath =="" 的元素。

我正在使用 IE 10 来测试共享点站点。

【问题讨论】:

  • 它工作正常。是否在任何frames 下?
  • 不,它不在框架下,而是在 td 下,

标签: selenium xpath selenium-webdriver automation webdriver


【解决方案1】:

我终于得到了答案,我只是按照blog 中的步骤操作

 driver.findElement(By.xpath("//SPAN[@id='part1']/TABLE[3]/TBODY/TR[16]/TD[2]/SPAN")).click();
         driver.findElement(By.xpath("//SPAN[@id='part1']/TABLE[3]/TBODY/TR[16]/TD[2]/SPAN")).sendKeys(Parentcompany);

【讨论】:

    【解决方案2】:

    试试下面的定位器。

    new Select(driver.findElemet(By.cssSelector("select[title='Parent company']"))).selectByVisibleText("Baker Brazil");
    

    【讨论】:

    • 显示同样的错误无法定位元素:{"method":"css selector","selector":"select[title='Parent company']"}
    • 在任何其他浏览器中都可以正常工作吗?您是否在萤火虫中验证了定位器?是那个定位器的独特元素吗?它在 iframe 中吗?
    • 用下面的定位器试试 ==>> By.xpath("//td[@id='MSOZoneCell_WebPartWPQ5']//select[contains(@name,Lookup) and @title='Parent company ']")
    【解决方案3】:

    我认为 id 是自动生成的(通常是 .net/share point 应用程序)。试试下面的代码

    示例:

    new Select(driver.findElemet(By.xpath("//*[contains(@id='Lookup')]"))).selectByVisibleText("Baker Brazil");
    

    或者只检查 id 的哪一部分是自动生成的,并使用 xpath 函数 (starts-with() or ends-with() or contains()) 相应地修改 xpath,如示例所示

    【讨论】:

    • 刚刚发现sharepoint表单使用web表格来对齐文本和字段。因此,首先您需要获取表格,然后导航到特定行,然后使用上述选项(我和@Santoshsarma 提供的答案都可以)
    • 你能指导我按照你说的导航到行吗?我已经添加了屏幕截图
    • 发布了新答案...检查一下
    【解决方案4】:

    我在其中一个共享点应用程序中检查了表单/Web 表位于 iframe 中。这就是您收到异常的原因。 直接试试下面的代码,不用去表过程

    driver.findElement(By.linkText("Add new item")).click();
    //give your iframe class name, which will be on top of the topmost table tag
    driver.switchTo().frame(driver.findElement(By.className("ms-dlgFrame")));
    //use below xpath
    Select list = new Select (driver.findElement(By.xpath("//select[@title='Parent Company']")));
    list.selectByVisibleText("Baker Brazil");
    

    【讨论】:

    • @bharth ,我在 html 代码中没有看到任何框架。供您参考,我添加了完整的 html 代码。
    • 当我使用下面的代码时,它在火狐中运行良好,但在 IE 10 中仍然无法运行。 String dropdownXpath = "//table/tbody/tr[4]/td/table/tbody/tr [2]/td[3]/placeholder/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/div/span/table[3 ]/tbody/tr[16]/td[2]/span/select"; WebElement textInDropDown = driver.findElement(By.xpath(dropdownXpath + "[@id='ctl00_m_g_bac1b910_309d_4e46_47b4_0b8a052b0579_ctl00_ctl04_ctl15_ctl00_ctl00_ctl04_ctl00_Lookup']")); textInDropDown.click(); driver.findElement(By.xpath(dropdownXpath)).sendKeys(Parentcompany);
    • 嘿普拉莫德,....对不起...真的我也无法通过参考您的 html 来提供正确的答案。您能否使用 AUI(advance user interfaces-mouse hover) 尝试相同的 xpath(详细信息)。让我知道这是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2017-06-16
    • 2023-04-01
    相关资源
    最近更新 更多