如何使用带有 C# 的 Selenium 2.0 获取查找列表项
How to get lookup list item using Selenium 2.0 with C#
我正在尝试 select 查找列表中的项目,它不像下拉列表。如果您编写的内容与查找列表的内容相匹配,所有匹配的内容都会显示在列表中,即使您知道查找列表中的项目,也不能简单地在文本字段中键入,您必须单击查找中的项目列表以便它填充在文本字段中。
我正在做的是,我在字段中写入有效字段值的完整文本,以便它是唯一出现在查找列表中的项目,然后尝试搜索该列表项以便可以单击它,但无论我尝试什么,找不到该项目。这是我已经尝试过的:
这是 html:
<body>
<div class="body-home"></div>
<script type="text/javascript"></script>
<script></script>
<div id="cboxOverlay" style="display: none;"></div>
<div id="colorbox" class="" style="display: none;"></div>
<ul id="ui-id-1" class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" tabindex="0" style="z-index: 1; display: none; top: 456.783px; left: 468.033px; width: 247px;">
<li class="ui-menu-item" role="presentation">
<a id="ui-id-27" class="ui-corner-all" tabindex="-1">
<span style="padding:10px;"></span>
</a>
</li>
上面html 中的最后一个标签是我要获取的标签。
这是我试过的 xpath,我也试过 cssSelecter,但没有任何效果。
IWebElement selectItem = driverX.FindElement(By.XPath("/ul[@id='ui-id-1']/li[1]/a"));
selectItem.Click();
非常感谢任何帮助。
索菲亚
索菲亚,
也许你应该首先尝试最直接的测试,即通过一个已知的 Id
来查看它是否有效:
IWebElement selectItem = driverX.FindElement(By.Id("ui-id-27"));
selectItem.Click();
一旦你建立了这个,那么你就可以真正仔细地观察通用结构(显然使用 ui-id-27
只是为了这个测试)。然后,我将继续查看真实案例中的 XPath 结构,并在提供的 Id 和通用 Xpath 元素之间建立测试。
为了 type/select 和查找列表中的项目,您应该首先单击包含 ul/li 项目的父项。当您点击它的父级时,与 ul/li 关联的样式(显示:none)将被删除,以便您可以与 ul/li.
进行交互
从 HTML posted 中,我们可以观察到 UL 具有属性显示的样式:none,这意味着我们无法与其或其子项交互.如果您 post 完整 HTML/the 网站 url,我们可以找到解决方案。
例如,查看 this 网站,它有类似的查询列表,下面是解决方案。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium;
namespace TestSelenium
{
[TestClass]
public class UnitTest1
{
public ChromeDriver browser;
[TestMethod]
public void TestMethod1()
{
try
{
browser = new ChromeDriver();
browser.Navigate().GoToUrl("https://roofandfloor.com/");
System.Threading.Thread.Sleep(5000);
// Select City.
IWebElement parentDiv = browser.FindElement(By.ClassName("city-dropdown-search"));
parentDiv.Click();
this.SelectItem("Bangalore");
// Select Property.
parentDiv = browser.FindElement(By.ClassName("property-type-checkboxes"));
parentDiv.Click();
this.SelectItem("Villa");
// Select Bed room. Need to write separate code for this.
parentDiv = browser.FindElement(By.ClassName("bedroom-select-container"));
parentDiv.Click();
System.Threading.Thread.Sleep(1500);
IWebElement items = browser.FindElement(By.ClassName("search-bedrooms"));
foreach (IWebElement item in items.FindElements(By.TagName("span")))
{
if (item.Text.Contains("1 BHK"))
{
item.Click();
break;
}
}
// Select Max budget.
parentDiv = browser.FindElement(By.Id("s2id_priceMax"));
parentDiv.Click();
this.SelectItem("5 Lakhs");
// Select Build up area.
parentDiv = browser.FindElement(By.Id("s2id_areaMin"));
parentDiv.Click();
this.SelectItem("600 Sq.ft.");
// Select Possession.
parentDiv = browser.FindElement(By.Id("s2id_possessionDate"));
parentDiv.Click();
this.SelectItem("Ready to Occupy");
}
catch
{ }
}
private void SelectItem(string itemText)
{
System.Threading.Thread.Sleep(1500);
IWebElement items = browser.FindElement(By.Id("select2-drop"));
foreach (IWebElement item in items.FindElements(By.TagName("li")))
{
if (item.Text.Contains(itemText))
{
item.Click();
break;
}
}
}
}
}
尝试观察 posted 门户的 HTML。上述解决方案适用于 select 查找项。
我正在尝试 select 查找列表中的项目,它不像下拉列表。如果您编写的内容与查找列表的内容相匹配,所有匹配的内容都会显示在列表中,即使您知道查找列表中的项目,也不能简单地在文本字段中键入,您必须单击查找中的项目列表以便它填充在文本字段中。 我正在做的是,我在字段中写入有效字段值的完整文本,以便它是唯一出现在查找列表中的项目,然后尝试搜索该列表项以便可以单击它,但无论我尝试什么,找不到该项目。这是我已经尝试过的: 这是 html:
<body>
<div class="body-home"></div>
<script type="text/javascript"></script>
<script></script>
<div id="cboxOverlay" style="display: none;"></div>
<div id="colorbox" class="" style="display: none;"></div>
<ul id="ui-id-1" class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" tabindex="0" style="z-index: 1; display: none; top: 456.783px; left: 468.033px; width: 247px;">
<li class="ui-menu-item" role="presentation">
<a id="ui-id-27" class="ui-corner-all" tabindex="-1">
<span style="padding:10px;"></span>
</a>
</li>
上面html 中的最后一个标签是我要获取的标签。
这是我试过的 xpath,我也试过 cssSelecter,但没有任何效果。
IWebElement selectItem = driverX.FindElement(By.XPath("/ul[@id='ui-id-1']/li[1]/a"));
selectItem.Click();
非常感谢任何帮助。 索菲亚
索菲亚,
也许你应该首先尝试最直接的测试,即通过一个已知的 Id
来查看它是否有效:
IWebElement selectItem = driverX.FindElement(By.Id("ui-id-27"));
selectItem.Click();
一旦你建立了这个,那么你就可以真正仔细地观察通用结构(显然使用 ui-id-27
只是为了这个测试)。然后,我将继续查看真实案例中的 XPath 结构,并在提供的 Id 和通用 Xpath 元素之间建立测试。
为了 type/select 和查找列表中的项目,您应该首先单击包含 ul/li 项目的父项。当您点击它的父级时,与 ul/li 关联的样式(显示:none)将被删除,以便您可以与 ul/li.
进行交互从 HTML posted 中,我们可以观察到 UL 具有属性显示的样式:none,这意味着我们无法与其或其子项交互.如果您 post 完整 HTML/the 网站 url,我们可以找到解决方案。
例如,查看 this 网站,它有类似的查询列表,下面是解决方案。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium;
namespace TestSelenium
{
[TestClass]
public class UnitTest1
{
public ChromeDriver browser;
[TestMethod]
public void TestMethod1()
{
try
{
browser = new ChromeDriver();
browser.Navigate().GoToUrl("https://roofandfloor.com/");
System.Threading.Thread.Sleep(5000);
// Select City.
IWebElement parentDiv = browser.FindElement(By.ClassName("city-dropdown-search"));
parentDiv.Click();
this.SelectItem("Bangalore");
// Select Property.
parentDiv = browser.FindElement(By.ClassName("property-type-checkboxes"));
parentDiv.Click();
this.SelectItem("Villa");
// Select Bed room. Need to write separate code for this.
parentDiv = browser.FindElement(By.ClassName("bedroom-select-container"));
parentDiv.Click();
System.Threading.Thread.Sleep(1500);
IWebElement items = browser.FindElement(By.ClassName("search-bedrooms"));
foreach (IWebElement item in items.FindElements(By.TagName("span")))
{
if (item.Text.Contains("1 BHK"))
{
item.Click();
break;
}
}
// Select Max budget.
parentDiv = browser.FindElement(By.Id("s2id_priceMax"));
parentDiv.Click();
this.SelectItem("5 Lakhs");
// Select Build up area.
parentDiv = browser.FindElement(By.Id("s2id_areaMin"));
parentDiv.Click();
this.SelectItem("600 Sq.ft.");
// Select Possession.
parentDiv = browser.FindElement(By.Id("s2id_possessionDate"));
parentDiv.Click();
this.SelectItem("Ready to Occupy");
}
catch
{ }
}
private void SelectItem(string itemText)
{
System.Threading.Thread.Sleep(1500);
IWebElement items = browser.FindElement(By.Id("select2-drop"));
foreach (IWebElement item in items.FindElements(By.TagName("li")))
{
if (item.Text.Contains(itemText))
{
item.Click();
break;
}
}
}
}
}
尝试观察 posted 门户的 HTML。上述解决方案适用于 select 查找项。