【问题标题】:Knowing which criteria to seach by for Web Driver to select option from drop down menu知道要根据哪些条件搜索 Web 驱动程序以从下拉菜单中选择选项
【发布时间】:2015-07-09 03:59:39
【问题描述】:

我正在尝试使用 WebDriver 在下拉菜单中选择一个值。我要做的选择是:

</option><option selected="selected" value="12345678~ Company Name ~123~123456789">         Company Name,    -- 759313        </option>

我一直在使用代码:

IWebElement element2 = driver.FindElement(By.XPath("//tr/td/form[2]/table/tbody/tr[9]/td[2]/select"));
SelectElement selector2 = new SelectElement(element2);

我一直在尝试:

selector2.SelectByIndex(3); //it is the 3rd option in the list, starting my count at 1, not 0.
selector2.SelectByValue("12345678~ Company Name ~123~123456789");
selector2.SelectByText("         Company Name,    -- 759313        ");

在多次尝试使用这些调用后,我似乎无法让选择来选择我想要的,它会抛出一个错误,说它找不到我的选择。我假设空格是什么给我带来麻烦或让我困惑?我试过带空格和不带空格。任何帮助将不胜感激。

【问题讨论】:

  • 你能同时显示选择标签和所有其他选项吗?
  • 打印出选项列表 (.Options) - 你看到要选择的选项了吗?
  • @Saifur 我发布的是与此特定列表相关联的所有标签...不幸的是,此站点提供的内容不多。
  • @alexce ,我很抱歉,但我不知道该怎么做。您能否向我发送一份参考资料,以帮助我帮助您?
  • 如果您仍然遇到任何问题,请发布两次选择的代码

标签: c# html selenium selenium-webdriver webdriver


【解决方案1】:

你可以用 css 做到这一点:

.pulldown option[text*="12345678~ Company Name ~123~123456789"]
.pulldown option[value*="000759313"]

希望这可行,因为我在快照中看不到完整的描述部分

【讨论】:

    【解决方案2】:

    我发现我的问题是必须等待将值添加到我的下拉菜单中,而我之前并没有等待。我的解决方案如下:

    if(TaxIdOwner == "TaxID1" || TaxIdOwner == "TaxID2")
                    {
                        selector.SelectByText("Company based on Tax Id");
                        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
                        IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
                            {
                                //The XPath of the drop down menu that was not working for me
                                return d.FindElement(By.XPath("//tr/td/form[2]/table/tbody/tr[9]/td[2]/select"));
                            });
                        //Now that the web driver has waited, I can select the values I wanted.  
                        //I could only get these manual clicks to work, 
                        //WebElements didnt seem to want work for me, personally.
                        driver.FindElement(By.XPath("//tr/td/form[2]/table/tbody/tr[9]/td[2]/select")).Click();
                        driver.FindElement(By.XPath("//tr/td/form[2]/table/tbody/tr[9]/td[2]/select/option[3]")).Click();
                    }                        
    

    【讨论】:

    • 你应该简化你的xpath,它非常混乱而且看起来不太可靠。你能分享来自 DOM 查看器(如 firebug 等)的源代码吗?
    • @Karthik 当然没问题,我是 firepath/firebug 和 XPath 的新手,所以我正在努力获得更好的路径。
    • @Karthik 我发布了一张我的 Fire 路径的图片,我为了价值而对其进行了简化。如果你能推荐一个更好的方法来做到这一点,我会渴望学习!
    • 尝试使用这个 XPath:"//option[@class= 'pulldown']" :)
    • @nikita_em 谢谢你的建议!我把你说的放到 Firepath 里面,什么都找不到,你推荐我这样用吗?...driver.FindElement(By.XPath("//option[@class = 'pulldown']") ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2023-03-12
    相关资源
    最近更新 更多