WebDriver C# - 使用部分文本从下拉列表中选择一个项目
WebDriver C# - Selecting an item from a drop down list using partial text
我正在用 C# 编写一个 WebDriver 测试用例,我需要在其中 select 下拉列表中的一个项目。
下拉菜单中的文字是人名,后跟距离和容量。问题是在运行时只有显示的文本的第一部分是已知的,即人名。如果这是 link,我可以使用以下相当标准的代码点击它:
driver.FindElements(By.Id("Name")).Click();
可惜它不是 link。我从下面的 OpenQA.Selenium.Support.UI
中的 SelectElement
class 复制了 SelectByText()
方法的定义。或者更具体地说,SelectByText()
方法中与 substring/partial 文本匹配相关的定义中的注释:
// Parameters:
// text:
// The text of the option to be selected. If an exact match is not found, this
// method will perform a substring match.
我无法获得 perform a substring match
的方法。
这是我试过的。例如我的 HTML 代码类似于:
<select id="ddlTest">
<option>Firstname Lastname - 35 miles - 50%</option>
</select>
我尝试了以下 C# Webdriver,但没有找到我期望的子字符串匹配。
var selectList = driver.FindElement(By.Id("ddlTest"));
var options = new SelectElement(selectList);
options.SelectByText("Firstname Lastname");
这就是测试失败的原因,因为它找不到包含文本 Firstname Lastname
.
的元素
如何让此方法使用它在我上面复制的定义注释中描述的子字符串匹配?
selectList.FindElement(By.XPath(string.Format("./option[starts-with(text(), '{0}')]", "Firstname Lastname"))).Click();
未测试但应该适合您
By byXpath = By.XPath("//select[@id='ddlTest']/option[contains(text(),'Firstname Lastname')]");
driver.FindElement(byXpath).Click();
我正在用 C# 编写一个 WebDriver 测试用例,我需要在其中 select 下拉列表中的一个项目。
下拉菜单中的文字是人名,后跟距离和容量。问题是在运行时只有显示的文本的第一部分是已知的,即人名。如果这是 link,我可以使用以下相当标准的代码点击它:
driver.FindElements(By.Id("Name")).Click();
可惜它不是 link。我从下面的 OpenQA.Selenium.Support.UI
中的 SelectElement
class 复制了 SelectByText()
方法的定义。或者更具体地说,SelectByText()
方法中与 substring/partial 文本匹配相关的定义中的注释:
// Parameters:
// text:
// The text of the option to be selected. If an exact match is not found, this
// method will perform a substring match.
我无法获得 perform a substring match
的方法。
这是我试过的。例如我的 HTML 代码类似于:
<select id="ddlTest">
<option>Firstname Lastname - 35 miles - 50%</option>
</select>
我尝试了以下 C# Webdriver,但没有找到我期望的子字符串匹配。
var selectList = driver.FindElement(By.Id("ddlTest"));
var options = new SelectElement(selectList);
options.SelectByText("Firstname Lastname");
这就是测试失败的原因,因为它找不到包含文本 Firstname Lastname
.
如何让此方法使用它在我上面复制的定义注释中描述的子字符串匹配?
selectList.FindElement(By.XPath(string.Format("./option[starts-with(text(), '{0}')]", "Firstname Lastname"))).Click();
未测试但应该适合您
By byXpath = By.XPath("//select[@id='ddlTest']/option[contains(text(),'Firstname Lastname')]");
driver.FindElement(byXpath).Click();