相关疑难解决方法(0)

webdriver的官方定位策略

官方W3c webdirver文档中,明确指出位置策略是:

State   Keyword
CSS selector    "css selector"
Link text selector  "link text"
Partial link text selector  "partial link text"
Tag name    "tag name"
XPath selector  "xpath"
Run Code Online (Sandbox Code Playgroud)

但是,Selenium的电线协议允许:

class name  
css selector
id  
name
link text
partial link text
tag name
xpath
Run Code Online (Sandbox Code Playgroud)

在理论中,Selenium的文档已经过时,"真实"的故事在新的规范文档中.然而...

我在最新的Chrome自己的Webdriver上运行了一些测试,我可以确认这一点,name并且class name两者都有效; 但是,它们不符合规格.

我记得在Chromium问题上阅读他们只会实现官方的Webdriver规范.

现在:我知道通用答案,其中"规格并不总是100%遵循"等.但是,我想知道的是:

  • 你能找到Chromium中实现这个的代码吗?(链接将是最受欢迎的)
  • 在Chromium邮件列表中是否有关于这些的讨论?
  • "非官方"命令("旧"硒规格文件中记录的)可能会留下来吗?你在哪里读到的?

javascript selenium google-chrome chromium chrome-web-driver

12
推荐指数
1
解决办法
5128
查看次数

如何从Selenium处理Shadow DOM中的元素

我想自动执行文件下载完成检查chromedriver. HTML下载列表中的每个条目看起来像

<a is="action-link" id="file-link" tabindex="0" role="link" href="http://fileSource" class="">DownloadedFile#1</a>
Run Code Online (Sandbox Code Playgroud)

所以我使用以下代码来查找目标元素:

driver.get('chrome://downloads/')  # This page should be available for everyone who use Chrome browser
driver.find_elements_by_tag_name('a')
Run Code Online (Sandbox Code Playgroud)

这将返回空列表,同时有3个新下载.

正如我发现的那样,只能#shadow-root (open)处理标签的父元素.那么如何在这个#shadow-root元素中找到元素呢?

python selenium selenium-webdriver shadow-dom

9
推荐指数
3
解决办法
3813
查看次数

Jasmine - 无法访问自定义 Web 组件的 shadowRoot

我最近一直在尝试使用 jasmine 对使用 shadow dom 的自定义 Web 组件进行一些单元测试。该组件接受一个 text 属性并将其传递给一个子元素以用作其文本内容,我正在尝试验证 textContent 是否应该是它的内容。

每次我尝试访问shadowRoot我的组件的 ,然后访问它的子级时,它都会返回 null。

我简化了一些名称,但代码是相同的。

成分:

@Component({
    tag: 'my-button',
    styleUrl: 'my-button.css',
    shadow: true,
})
export class MyButton {
    @Prop() text: string;
    @Prop() iconName: string;
    @Prop() url: string;

    render() {
        return (
            <div class="button-outer">
                <ion-button class="button" expand="block" href={this.url}>
                    <holo-icon class="button-icon" slotName="icon-only" iconName={this.iconName} />
                    <p class="button-label">{this.text}</p>
                </ion-button>
            </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<my-button
    text="Test"
    icon-name="assets/svg/test-icon.svg"
    url="/test"
></my-button>
Run Code Online (Sandbox Code Playgroud)

测试:(TestBed 设置正常 - 异步)

describe('has the expected html tags', () => { …
Run Code Online (Sandbox Code Playgroud)

jasmine typescript karma-jasmine ionic-framework angular

8
推荐指数
0
解决办法
839
查看次数

如何使用 selenium 自动化 shadow DOM 元素?

我正在使用 Java Selenium 项目进行网页自动化。该网页包含许多我无法使用 seleniumfindElement方法与之交互的多级 shadow-root DOM 元素。

我尝试了以下解决方案:

  • deep css(不适用于最新的 chrome 浏览器)
  • JS 执行器。(这真的很乏味,维护起来也很复杂)

笔记:

如果您知道我可以在 Selenium Java 框架中实现的除上面列出的任何其他解决方案,请传递该解决方案。提前致谢 !。

javascript java selenium shadow-dom polymer

6
推荐指数
5
解决办法
3万
查看次数

什么是硒,什么是WebDriver?

什么是硒?

当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“硒的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。据此,我推断出Selenium是工具的集合,该集合包括IDE,WebDriver API(语言绑定),Grid,Selenium Standalone Server,浏览器驱动程序。必须下载适当的文件才能构建项目。

什么是WebDriver?

WebDriver是一个API。它用多种语言编写,这些语言称为语言绑定。API具有控制浏览器的功能。您可以使用这些功能编写脚本来以所需的方式(测试用例)控制浏览器。

这就是我所知道的。如果我错了,请纠正我。我想从面试的角度知道这两个问题的答案。

selenium webdriver selenium-webdriver

4
推荐指数
2
解决办法
602
查看次数

使用 python 从 selenium chrome webdriver 启动时如何在隐身模式下添加扩展

我们正在使用 selenium python webdriver 进行一些测试,其中我们需要以隐身模式打开一个 url 并启用一个已安装的扩展,然后执行一些操作。

我的发现:

  • 在隐身模式下加载扩展程序不起作用
  • icgnito 模式关闭时扩展被加载

验证了这么多关于堆栈溢出的帖子,没有任何效果。尝试了下面的代码”

path = os.path.dirname(r"C:\Users\ab\AppData\Local\Google\Chrome\User Data\Default\Extensions\jfpmbokkdeapjommajdfmmheiiakdlgo\0.1.7_0\manifest.json")
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
options.add_argument("--load-extension={path}")
driver = webdriver.Chrome(chrome_options=options, executable_path='C:\chromedriver_win32\chromedriver.exe')
driver.maximize_window()
driver.get(xxxxxxxx)
Run Code Online (Sandbox Code Playgroud)

抛出错误无法加载manifest.json,或者丢失或不可读。不过我已经确保路径是正确的。

有什么建议请如何在隐身模式下打开 chrome 驱动程序时加载扩展程序吗?

python selenium

2
推荐指数
1
解决办法
4733
查看次数

在 Firefox 中通过 Selenium 访问 ShadowRoot 返回 JavascriptException: Cyclic object value

我正在尝试使用 Python 和 Selenium 自动化www.freeinvaders.org版本的 Space Invaders。实际的游戏通过一个 HTML5 画布元素运行,该元素被包裹在一个 Shadow-root 中。

使用这个问题的答案,我尝试扩展影子根,这样我就可以单击画布并“玩”游戏。

我当前的代码:

  def expand_shadow_element(element):
     shadowRoot = browser.execute_script('return arguments[0].shadowRoot', element)
     return shadowRoot
  

  browser = webdriver.Firefox()
  browser.get("http://www.freeinvaders.org/")

  #wait for element to load

  el = WebDriverWait(browser, timeout=20).until(lambda d:d.find_element_by_tag_name("ruffle-player"))
  time.sleep(5)

  #expand the shadowroot and click the canvas
  host = browser.find_element_by_tag_name("ruffle-player")
  shadowRoot = expand_shadow_element(host)
  canvas = shadowRoot.find_element_by_tag_name("canvas")
  canvas.click()
Run Code Online (Sandbox Code Playgroud)

页面的 HTML 结构如下:(为了易读性进行了删节)

<!DOCTYPE html> 
<html lang="en-US">
<head>

<title>Free Invaders</title>

</head>
<body>
<div id='full-page-container'>  
<main>
  <div id="game-container">
       
    <ruffle-player>
  #shadow-root (open)
  <div id="container" style="visibility: …
Run Code Online (Sandbox Code Playgroud)

javascript python selenium

2
推荐指数
1
解决办法
3003
查看次数

如何使用 Selenium 在 #shadow-root (open) 中与 Cookie pop 交互

我想废弃 immowelt.de,但我无法通过 cookie 横幅。我尝试使用 sleep() 和 WebDriverWait 等待横幅加载,但是它们都不起作用。

这是网络驱动程序的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

chrome_driver_path = '.../chromedriver'
url = 'https://www.immowelt.de/immobilienpreise'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get(url)

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="uc-center-container"]/div[2]/div/div/div/div[1]/button'))).click()

driver.close()
Run Code Online (Sandbox Code Playgroud)

这是带有睡眠的代码

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

chrome_driver_path = '.../chromedriver'
url = 'https://www.immowelt.de/immobilienpreise'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get(url)
time.sleep(5)
driver.find_element(By.XPATH, '//*[@id="uc-center-container"]/div[2]/div/div/div/div[1]/button').click()

driver.close()
Run Code Online (Sandbox Code Playgroud)

cookies selenium selenium-webdriver shadow-dom queryselector

1
推荐指数
1
解决办法
3688
查看次数