2

我正在尝试单击一个元素。当我在 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

我用部分链接文本尝试了相同的 xpath并且它有效。

任何人都可以提出解释吗?

4

3 回答 3

0

我最近几天才开始使用 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]

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

让我知道它是否有效。

  • 硒生成测试 在此处输入图像描述
于 2019-08-20T06:57:16.817 回答
0

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

  • 使用text()

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

    driver.findElement(By.xpath("//a[contains(.,'Dashboard')]"))
    
于 2019-08-19T15:15:10.233 回答
0

我尝试在 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 浏览器,然后再次尝试使用我的示例代码进行测试以检查是否解决了问题。

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

于 2019-08-20T05:09:59.610 回答