如何在下拉列表中选择与 specflow 大纲值相同的值
How to choose the same values in a dropdownlist as in specflow outline values
我目前正在为我结合使用 selenium 和 Specflow 的申请表创建自动测试。
在我的 Specflow 场景中,我有一个场景大纲,其中包含一些我希望使用的示例。我在使用场景大纲示例中的值填充简单文本字段时没有问题,但我似乎无法从下拉列表中获取 selenium select 与我的 specflow 场景大纲中相同的项目。
Specflow scenario outline step
Specflow scenario outline example data
Sending the data from the example
Cathing and populating the text field
我将如何复制它,而不是填充文本字段,我想 select 下拉列表中与 specflow 场景大纲中的值相同的项目?
目前我已经创建了步骤和示例,但我不知道如何正确发送数据并捕获并单击下拉列表中的正确项目
Specflow scenario outline step for dropdown
Specflow scenario outline example data for drop down items
编辑 1:
我为图层和步骤页面尝试过的当前代码
成功单击下拉列表但未选择与功能大纲中相同的值
public string MaritalStatus
{
set
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']")).SendKeys(value);
}
}
[Then(@"I choose value (.*) in dropdown MainApplicantMaritalStatus and Check Value")]
public void ThenIChooseValueInDropdownMainApplicantMaritalStatusAndCheckValue(string value)
{
_cashLoanPage.MaritalStatus = value;
}
成功单击下拉列表,但只有 select下拉列表中的第一项
public void MaritalStatus1()
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']")).Click();
}
[Then(@"I choose value (.*) in dropdown MainApplicantMaritalStatus and Check Value")]
public void ThenIChooseValueInDropdownMainApplicantMaritalStatusAndCheckValue1(string x)
{
_cashLoanPage.MaritalStatus1();
}
编辑 2:
在 Dazed 的帮助下,这段代码可以正常工作,以防任何人遇到类似问题
public void MaritalStatus(string value)
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath(string.Format("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[text()='{0}']", value))).Click();
}
这是应该有效的方法。
[Then(@"I choose (.*) in dropdown MainApplicantMaritalStatus and Check value")]
public void IChooseInDropdownMainApplicantMaritalStatusAndCheckValue(string status)
{
// lets say you have select element
WebElement maritalStatus = driver.findElement();
WebElement option = maritalStatus.findElement(By.xpath("./option[normalize-space(.)='" + status + "']"));
// click on option
option.click();
}
我通常为此使用字符串格式。我不确定您的 html 标记是什么样的,但这将采用您从场景大纲传入的 "value" 并将其替换为您的定位器类型,在本例中为 xpath。
[Then(@"I choose (.*) in dropdown MainApplicantMaritalStatus and Check value")]
public void IChooseInDropdownMainApplicantMaritalStatusAndCheckValue(string value)
{
driver.FindElement(By.XPath(string.Format("//select[@id='status']/option[text()='{0}']",
value))).Click();
}
****更新***
如果您查看
的 xpath,请转到此处 https://www.w3schools.com/html/tryit.asp?filename=tryhtml_elem_select
//select[@name='cars']/option ---- you get 4 results
如果我添加这个
//select[@name='cars']/option[contains(text(), 'Saab')] -- you get one result
如果我将代码中的路径更改为此,我可以传入我想要的值 select。
string value = "Saab";
driver.FindElement(By.XPath(string.Format("//select[@name='cars']/option[contains(text(), '{0}')]", value))).Click();
所以使用您的代码,看起来您正在使用 POM?您可以将其作为方法添加到页面,并从步骤中调用它。由于我们看不到您的完整 html,我可以为您提供下拉值的确切 xpath。
来自步骤:
string myValue = "Married"
Pages.MyPage.SetMaritalStatus(string myValue);
来自页面:
public void SetMaritalStatus(string value)
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath(string.Format("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']/option[text()='{0}']", value))).Click();
}
我目前正在为我结合使用 selenium 和 Specflow 的申请表创建自动测试。 在我的 Specflow 场景中,我有一个场景大纲,其中包含一些我希望使用的示例。我在使用场景大纲示例中的值填充简单文本字段时没有问题,但我似乎无法从下拉列表中获取 selenium select 与我的 specflow 场景大纲中相同的项目。
Specflow scenario outline step
Specflow scenario outline example data
Sending the data from the example
Cathing and populating the text field
我将如何复制它,而不是填充文本字段,我想 select 下拉列表中与 specflow 场景大纲中的值相同的项目?
目前我已经创建了步骤和示例,但我不知道如何正确发送数据并捕获并单击下拉列表中的正确项目
Specflow scenario outline step for dropdown
Specflow scenario outline example data for drop down items
编辑 1: 我为图层和步骤页面尝试过的当前代码
成功单击下拉列表但未选择与功能大纲中相同的值
public string MaritalStatus
{
set
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']")).SendKeys(value);
}
}
[Then(@"I choose value (.*) in dropdown MainApplicantMaritalStatus and Check Value")]
public void ThenIChooseValueInDropdownMainApplicantMaritalStatusAndCheckValue(string value)
{
_cashLoanPage.MaritalStatus = value;
}
成功单击下拉列表,但只有 select下拉列表中的第一项
public void MaritalStatus1()
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']")).Click();
}
[Then(@"I choose value (.*) in dropdown MainApplicantMaritalStatus and Check Value")]
public void ThenIChooseValueInDropdownMainApplicantMaritalStatusAndCheckValue1(string x)
{
_cashLoanPage.MaritalStatus1();
}
编辑 2: 在 Dazed 的帮助下,这段代码可以正常工作,以防任何人遇到类似问题
public void MaritalStatus(string value)
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath(string.Format("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[text()='{0}']", value))).Click();
}
这是应该有效的方法。
[Then(@"I choose (.*) in dropdown MainApplicantMaritalStatus and Check value")]
public void IChooseInDropdownMainApplicantMaritalStatusAndCheckValue(string status)
{
// lets say you have select element
WebElement maritalStatus = driver.findElement();
WebElement option = maritalStatus.findElement(By.xpath("./option[normalize-space(.)='" + status + "']"));
// click on option
option.click();
}
我通常为此使用字符串格式。我不确定您的 html 标记是什么样的,但这将采用您从场景大纲传入的 "value" 并将其替换为您的定位器类型,在本例中为 xpath。
[Then(@"I choose (.*) in dropdown MainApplicantMaritalStatus and Check value")]
public void IChooseInDropdownMainApplicantMaritalStatusAndCheckValue(string value)
{
driver.FindElement(By.XPath(string.Format("//select[@id='status']/option[text()='{0}']",
value))).Click();
}
****更新*** 如果您查看
的 xpath,请转到此处 https://www.w3schools.com/html/tryit.asp?filename=tryhtml_elem_select//select[@name='cars']/option ---- you get 4 results
如果我添加这个
//select[@name='cars']/option[contains(text(), 'Saab')] -- you get one result
如果我将代码中的路径更改为此,我可以传入我想要的值 select。
string value = "Saab";
driver.FindElement(By.XPath(string.Format("//select[@name='cars']/option[contains(text(), '{0}')]", value))).Click();
所以使用您的代码,看起来您正在使用 POM?您可以将其作为方法添加到页面,并从步骤中调用它。由于我们看不到您的完整 html,我可以为您提供下拉值的确切 xpath。
来自步骤:
string myValue = "Married"
Pages.MyPage.SetMaritalStatus(string myValue);
来自页面:
public void SetMaritalStatus(string value)
{
_driver.FindElement(By.Id("mainApplicant.maritalStatus")).Click();
_driver.FindElement(By.XPath(string.Format("//ul[@class='dropdown-menu show']//li[@role='presentation']//a[@class='dropdown-item']/option[text()='{0}']", value))).Click();
}