【问题标题】:Selenium: Access Parts of Scrollbar Using CSS SelectorSelenium:使用 CSS 选择器访问部分滚动条
【发布时间】:2017-12-17 22:09:51
【问题描述】:

这是访问滚动条元素的 xpath。

/html/body/div/div[3]/div/div[2]/div[2]/div[1]/table/tbody/tr/td/table/tbody/tr[5]/td/div/table[4]/tbody/tr/td/table/tbody/tr/td[3]/div/div/div/div[4]/div[1]/div[3]

我使用 Firepath 复制了这个 XPATH,但它很长并且容易更改。我想使用 css 选择器访问元素,但我不太确定该怎么做。下面是滚动条的 HTML 文件。

问题:如何从 'class="z-biglistbox-one z-biglistbox" ' 开始访问 Home、Previous、Next、End? xpath 较早访问 Next 按钮。如果您有任何想法如何做到这一点,请您分享一下。谢谢你。

<div id="pRCQhu3" class="z-biglistbox-one z-biglistbox" style="width:1100px;height:800px;">
   <div class="z-biglistbox-outer">
       <div id="pRCQhu3-head" class="z-biglistbox-head-outer">
       <div id="pRCQhu3-body" class="z-biglistbox-body-outer" style="height: 653px;">
       <a id="pRCQhu3-a" class="z-focus-a" style="top:0px;left:0px" onclick="return false;" href="javascript:;"></a>
       <div id="pRCQhu3-vbar" class="z-biglistbox-wscroll-vertical">
       <div id="pRCQhu3-hbar" class="z-biglistbox-wscroll-horizontal">
            <div class="z-biglistbox-wscroll-drag" style="left: 0px;">
               <div class="z-biglistbox-wscroll-home" title="Home"></div>
               <div class="z-biglistbox-wscroll-up" title="Previous"></div>
               <div class="z-biglistbox-wscroll-down" title="Next"></div>
               <div class="z-biglistbox-wscroll-end" title="End"></div>
       </div>
   </div>
</div>

注意:还有其他元素具有相同的类名。当我尝试使用类名时,会访问这些元素而不是这些元素。我想知道我是否可以使用这样的东西,因为这些是该类的第二次使用:

WebElement down = driver.findElement(By.className("z-biglistbox-wscroll-down[2]"));

【问题讨论】:

  • 请将解决方案作为答案发布,而不是作为问题的更新。这是为了避免混淆。谢谢。

标签: java html css selenium xpath


【解决方案1】:

为什么不使用“By.className”访问这些元素?

WebElement homeButton = driverGC.FindElement(
       By.ClassName("z-biglistbox-wscroll-home"));

【讨论】:

  • 我不能使用类名,因为还有其他元素具有相同的类名。这些元素出现在这些元素之前,所以当我使用类名时,这些元素就是被访问的元素。
【解决方案2】:

您可以使用类名找到它们

WebElement homeButton = driver.findElement(By.className("z-biglistbox-wscroll-home"));
WebElement homeButton = driver.findElement(By.className("z-biglistbox-wscroll-up"));
//...

或者部分类名使用cssSelector

WebElement homeButton = driver.findElement(By.cssSelector("[class*='home']"));
WebElement homeButton = driver.findElement(By.cssSelector("[class*='up']"));
//...

【讨论】:

  • 很遗憾,不能使用类名,因为还有其他元素具有相同的类名。这些元素出现在这些元素之前,所以当我使用类名时,这些元素就是被访问的元素。
  • @Andrea 祖先元素中的 id "pRCQhu3-hbar" 是唯一的吗?
【解决方案3】:

您可以为此使用类名

主页按钮

WebElement homeButton = driver.findElement(By.className("z-biglistbox-wscroll-home"));
homeButton.click();

向上按钮

WebElement upButton = driver.findElement(By.className("z-biglistbox-wscroll-up"));
upButton.click();

向下按钮

WebElement downButton = driver.findElement(By.className("z-biglistbox-wscroll-down"));
downButton.click();

结束按钮

WebElement endButton = driver.findElement(By.className("z-biglistbox-wscroll-end"));
endButton.click();

【讨论】:

  • 我不能使用类名,因为还有其他元素具有相同的类名。这些元素出现在这些元素之前,所以当我使用类名时,这些元素就是被访问的元素。
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2015-09-15
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多