如何在selenium和java中使用属性搜索元素

如何在selenium和java中使用属性搜索元素,java,selenium,user-interface,automation,Java,Selenium,User Interface,Automation,我试图用selenium编写一些代码,让我可以使用属性“gamename”的值来选择一个元素 当我检查代码时,我得到以下信息: h4 class= "cardTitle_1ifib5" role="gamename">Test Web </h4> 但我希望每次都能通过游戏名称的值进行搜索,这样我就可以使用数据提供商进行搜索 为了清楚起见,我想在每次运行函数时都更改“测试Web”部分,因为这就是将要更改的内容。选择器如下所示: root>

我试图用selenium编写一些代码,让我可以使用属性“gamename”的值来选择一个元素

当我检查代码时,我得到以下信息:

h4 class= "cardTitle_1ifib5" role="gamename">Test Web </h4>
但我希望每次都能通过游戏名称的值进行搜索,这样我就可以使用数据提供商进行搜索

为了清楚起见,我想在每次运行函数时都更改“测试Web”部分,因为这就是将要更改的内容。选择器如下所示:

root>div>main>article>div.cards\u f1mxfh>div:nth child(2)>a>section>div.cardTop\u 1ead8bu>h4
我不知道这是否有帮助

Selenium有一个选项,您可以通过该选项获取元素的属性。
[yourXpath].getAttribute(“名称”)

根据您共享的HTML和您的代码试用,通过
属性识别元素,您可以使用以下定位器策略:

  • xpath:


    • 如果要查找精确的文本,XPath可能就是:

      webDriver.findElement(By.xpath("//h4[contains(text(), '" + yourTestLucas + "')]"));
      
      通过这样做,您可以随时通过数据提供程序将值传递给它

      当我阅读您的评论时,您可以将其作为一种方法:

      案例1:如果您只想查找此元素:

      public WebElement findElementWithRoleName(String yourTestLucas) {
          return webDriver.findElement(By.xpath("//h4[contains(text(), '" + yourTestLucas + "')]"));
      }
      
      public void clickElementWithRoleName(String yourTestLucas) {
          webDriver.findElement(By.xpath("//h4[contains(text(), '"+ yourTestLucas + "')]")).click();
      }
      
      案例2:如果要单击此元素:

      public WebElement findElementWithRoleName(String yourTestLucas) {
          return webDriver.findElement(By.xpath("//h4[contains(text(), '" + yourTestLucas + "')]"));
      }
      
      public void clickElementWithRoleName(String yourTestLucas) {
          webDriver.findElement(By.xpath("//h4[contains(text(), '"+ yourTestLucas + "')]")).click();
      }
      

      若我正确理解了这个问题,下面是几个如何实现属性元素处理的示例:

      1。通过css选择器:

      webDriver.findElements(By.cssSelector("h4[role ='gamename']");
      
      webDriver.findElements(By.xpath("//h4[@role='gamename']"))
      
      WebElement element = driver.findElement(...);
      element.getAttribute("role")
      
      2。通过xPath:

      webDriver.findElements(By.cssSelector("h4[role ='gamename']");
      
      webDriver.findElements(By.xpath("//h4[@role='gamename']"))
      
      WebElement element = driver.findElement(...);
      element.getAttribute("role")
      

      3。通过WebElement方法:

      webDriver.findElements(By.cssSelector("h4[role ='gamename']");
      
      webDriver.findElements(By.xpath("//h4[@role='gamename']"))
      
      WebElement element = driver.findElement(...);
      element.getAttribute("role")
      
      这个例子中的一些应该有用


      希望这会有所帮助。

      已从代码检查部分的末尾删除,不知道为什么可以提供您正在测试的链接?您是否尝试过:String text=driver.findElement(By.xpath(“您的xpath”)).getText();System.out.println(文本);我可以只使用xpath选择链接,但我希望能够通过插入“gamename”来选择元素。因此,每次运行测试时,我都可以插入名称,因为我有一些游戏,它们都有类似的Xpath。使用Xpath为:“//h4[contains(text(),'test Web')]”嗨,是的,我知道如何做,但我如何才能只输入“名称”每次我运行代码时,属性都是一个变量字符串,因此它将使用字符串查找元素?我不确定我是否理解,对于该属性,您将有一个dinamic字符串进行搜索?它可能会从一个执行变为另一个执行?是的,这是正确的,我基本上在测试一个页面,页面上有不同的游戏卡,这是一个“游戏大厅”,但每个游戏都有不同的名称,所以我想能够按名称搜索,它们没有特定的顺序,所以xpath不起作用,css selectorOk也不起作用,谢谢你的信息。在这种情况下,我想到的第一个解决方案是,也许你可以在游戏大厅中获取所有信息,将其存储在一个数组中,然后通过
      regex matcher
      搜索,匹配你感兴趣的信息。这可以使用
      匹配器
      模式
      完成。我不确定这是否适用于你的情况,但如果你想试试,你可以试试。不,你不应该。根据这个问题,我的解决方案是基于静态字符串gamename。如果你想通过
      函数()调用传递一个变量
      字符串
      ,你可能需要提出一个新的问题和你的新要求,因为你现在无法更改这个问题,因为根据你当前的问题得到了几个经过仔细研究的答案。如果我想单击这个元素,我该如何使用void,抱歉,我对自动化很陌生testing@fearghalOreilly我更新了我的答案,希望它能给你一些想法:)谢谢你这么好,虽然我刚刚意识到我解释得不好,但角色名称没有改变,这是角色的价值所在,所以基本上是“测试卢卡斯”我想改变的是每个测试不是游戏名测试Lucass直到不起作用:))这是css,如果它有任何帮助的话#root>div>main>article>div.cards\u f1mxfh>div:nth child(2)>a>section>div.cardTop\u 1ead8bu>h4通常这东西没问题,只是出于某种原因没有选择它