谢谢您的协助。 Selenium / Chrome的新手,在我遇到特定情况之前,一直运行良好。
我有一个模态,包含5个字段(3个下拉列表和2个LI的UL)
每个LI都包含一个标签和input-复选框。
所有下拉菜单都有一个ID,因此可以轻松使用FindElement(By.Id("ID")).SelectText("TEXT");
但是Ul中的Li却没有它们,并且每次尝试定位它们时,我都获得了NoSuchElementExceptions。
<ul id="CertificatesToAdd" name="CertificatesToAdd" class="nav nav-list
checkbox-list add-certificate-required" data-trigger="manual" data- placement="top">
<li>
<label class="checkbox" style="font-weight:normal !important;">
<input type="checkbox" class="add-certificate-checkbox"
value="171">
Certificate of Registration
</label>
</li>
<li>
<label class="checkbox" style="font-weight:normal !important;">
<input type="checkbox" class="add-certificate-checkbox"
value="172">
Collection Agency License
</label>
</li>
</ul>
我尝试了待办事项下面的两个FindElement行,并且都返回
OpenQA.Selenium.NoSuchElementException: Unable to locate element
new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateCountry")))
.SelectByText("Canada");
new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateState")))
.SelectByText("Alberta");
//TODO: correct input value for checkbox
new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
"#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");
new SelectElement(BaseTest.Driver.FindElement(By.XPath(
"//*[@id="CertificatesToAdd"]/li[2]/label/input"))).SelectByValue("172");
任何想法都会有所帮助和赞赏。
答案 0 :(得分:1)
要单击与<label>
标记关联的复选框,可以使用以下解决方案:
注册证书:
BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Certificate of Registration']/input[@class='add-certificate-checkbox']")).Click();
托收代理许可证:
BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Collection Agency License']/input[@class='add-certificate-checkbox']")).Click();
答案 1 :(得分:0)
您在这里以li为目标:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Frida3.Components.TestView"
x:Name="this">
<ContentView.Content>
<StackLayout>
<Label Text="{Binding Path=Text, Source={x:Reference this}}" />
</StackLayout>
</ContentView.Content>
</ContentView>
这里的xpath表示输入是标签的子级,而不是同级:
new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
"#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");
我认为您可能可以从那里弄清楚。