在官方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%遵循"等.但是,我想知道的是:
javascript selenium google-chrome chromium chrome-web-driver
我想自动执行文件下载完成检查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元素中找到元素呢?
我最近一直在尝试使用 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) 我正在使用 Java Selenium 项目进行网页自动化。该网页包含许多我无法使用 seleniumfindElement方法与之交互的多级 shadow-root DOM 元素。
如果您知道我可以在 Selenium Java 框架中实现的除上面列出的任何其他解决方案,请传递该解决方案。提前致谢 !。
什么是硒?
当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“硒的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。据此,我推断出Selenium是工具的集合,该集合包括IDE,WebDriver API(语言绑定),Grid,Selenium Standalone Server,浏览器驱动程序。必须下载适当的文件才能构建项目。
什么是WebDriver?
WebDriver是一个API。它用多种语言编写,这些语言称为语言绑定。API具有控制浏览器的功能。您可以使用这些功能编写脚本来以所需的方式(测试用例)控制浏览器。
这就是我所知道的。如果我错了,请纠正我。我想从面试的角度知道这两个问题的答案。
我们正在使用 selenium python webdriver 进行一些测试,其中我们需要以隐身模式打开一个 url 并启用一个已安装的扩展,然后执行一些操作。
我的发现:
验证了这么多关于堆栈溢出的帖子,没有任何效果。尝试了下面的代码”
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 自动化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) 我想废弃 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
selenium ×7
javascript ×3
python ×3
shadow-dom ×3
angular ×1
chromium ×1
cookies ×1
jasmine ×1
java ×1
polymer ×1
typescript ×1
webdriver ×1