【问题标题】:Invalid Selector exception in Edge browser while same element can be found without any exception in chrome browserEdge浏览器中的无效选择器异常,而在chrome浏览器中可以找到相同的元素而没有任何异常
【发布时间】:2019-12-24 18:21:17
【问题描述】:

我正在尝试单击一个元素。当我在 chrome 浏览器上运行测试脚本时,元素被点击,当我在边缘浏览器上运行时,相同的测试脚本给出异常“InvalidSelectorException”

在 chrome-[https://cdn1.imggmi.com/uploads/2019/8/20/83d0add716dce6bdb5d8b1c6bac09544-full.png]] 中找到的元素图像

在边缘找到的元素图像 - [https://cdn1.imggmi.com/uploads/2019/8/20/6333dff18caf14f7440955587ee98228-full.png]

代码中使用的Xpath:

driver.findElement(By.xpath("//a[contains(text(),'Dashboard')]"))

我们可以看到边缘浏览器中的“仪表板”元素文本中没有引号,而 chrome 中的元素文本中有引号。

这就是边缘选择器无效的原因吗?

Dashboard.java:173  - Exception occured : 
org.openqa.selenium.InvalidSelectorException: The specified selector is 
invalid.
For documentation on this error, please visit: 
https://www.seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11- 
14T08:17:03'
System info: host: 'IND-L-SRAWAT', ip: '164.99.196.169', os.name: 
'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: 
'1.8.0_201'
Driver info: org.openqa.selenium.edge.EdgeDriver
Capabilities {acceptInsecureCerts: false, browserName: MicrosoftEdge, 
browserVersion: 44.17763.1.0, javascriptEnabled: true, pageLoadStrategy: 
normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), s 
etWindowRect: false, timeouts: {implicit: 0, pageLoad: 300000, script: 
30000}}
Session ID: 4BC8634F-5CCA-4747-BE2F-B7E4A0D59872
*** Element info: {Using=xpath, value=//a[contains(text(),'Dashboard')]}
2019-08-19 17:02:44 INFO  SettingsUIOperationsTest.java:104  - Test Case 
Failed

谁能帮我解决这个问题?

**** - 编辑 ****

我知道了

  1. .contains(某些文本)
  2. Xpath 中的条件
  3. " ' " 双引号内的单引号

这些都不适用于 IE 或 Edge

我用 Partial Link Text 尝试了相同的 xpath,它成功了。

谁能解释一下?

【问题讨论】:

    标签: selenium selenium-webdriver xpath selenium-chromedriver microsoft-edge


    【解决方案1】:

    不要使用contains(text(),'Dashboard'),而是尝试使用以下任一解决方案:

    • 使用text()

      driver.findElement(By.xpath("//a[text()='Dashboard']"))
      
    • 使用contains()

      driver.findElement(By.xpath("//a[contains(.,'Dashboard')]"))
      

    【讨论】:

    • 都试过了 -> 指定的选择器无效。 *** 元素信息:{Using=xpath, value=//a[text()='Dashboard'])]}*** 与您建议的其他 xpath 相同
    【解决方案2】:

    我尝试在 Microsoft Edge 44.18362.1.0 和 Chrome 中使用您的示例代码进行测试。我发现您的代码在两个浏览器中都运行良好,没有任何错误。我知道你是用 JAVA 代码做一个测试,这里我用 C# 做这个测试,代码行类似。

    HTML 代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
    
    <a href="#">Dashboard</a>
    
    </body>
    </html>
    

    C#代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using OpenQA.Selenium.Edge;
    using OpenQA.Selenium.Remote;
    using OpenQA.Selenium.Support.UI;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                IWebDriver driver = new EdgeDriver();
                //IWebDriver driver = new ChromeDriver();
                driver.Navigate().GoToUrl(@"C:\Users\panchals\Desktop\tests\215.html");
                Console.WriteLine(driver.Title.ToString());
    
                object element=driver.FindElement(By.XPath("//a[contains(text(),'Dashboard')]"));
                Console.WriteLine(element.ToString());
                driver.Close();
            }
        }
    }
    

    两个浏览器的输出:

    我建议您尝试为您的 Windows 操作系统安装最新更新以更新 Edge 浏览器,然后再次尝试使用我的示例代码进行测试,以检查问题是否解决。

    如果问题仍然存在,请尝试提供您的详细代码来产生问题。我们将再次尝试对其进行测试。

    【讨论】:

      【解决方案3】:

      我最近几天才开始使用 Selenium Web Driver,但发现 By.XPath 方法有一些非常奇怪的行为。

      这是我使用的 XPath(它未能找到元素……尽管它 100% 存在)。

      //a[contains(@href, '/Web/Login')])[2]
      

      在尝试通过 XPath 加载一堆不同的语法(但失败)后,我决定返回 Selenium IDE 并将任务导出为 Java(我是 C#),看看发生了什么。

      事实证明,导出的 Java 测试将 XPath 中的单引号...转义为类似这样的内容。

      //a[contains(@href, \'/Web/Login\')])[2]
      

      因此,只要我修改选择器以转义单引号,它就可以正常工作。

      让我知道它是否有效。

      • 硒生成测试

      【讨论】:

      • 执行仍然存在:指定的选择器无效。 ***元素信息:{Using=xpath, value=//a[contains(text(),'仪表板')]}***
      • 您是否尝试过在我发布时转义单引号?
      • 是的,我确实尝试过。反正问题解决了。 Edge 不支持 .contains(sometext) 作为 xpath 。我尝试使用元素的 CSS 属性然后它工作。还是谢谢你
      猜你喜欢
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多