在这里和其他地方已经有很多关于PhantomJS缺乏Function.prototype.bind方法的讨论,并且许多有用的慈善家已经编写过填充/填充或指向其他资源.我正在通过Selenium Webdriver和Python绑定实现PhantomJS.我已经尝试了几种方法来使用这种polyfill,但无济于事.目前我在我的webdriver继承测试器类中使用以下代码:
bindShim = """var script = document.createElement('script');
script.src = '/home/dunkin/scripts/es5-shim.js';***
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
"""
self.execute_script(bindShim)
Run Code Online (Sandbox Code Playgroud)
我每次访问新页面时都会执行此代码.事实上,这种方法可以确保PhantomJS能够理解jQuery变量.但是,我仍然在我的PhantomJS驱动程序日志中看到以下内容:
[ERROR - 2015-02-10T17:43:44.068Z] Session [fd37e5c0-b14b-11e4-b9e3-5bbebfaf3f9d] - page.onError - msg: TypeError: 'undefined' is not a function (evaluating 'arguments.callee.bind(this,e)')
[ERROR - 2015-02-10T17:43:44.069Z] Session [fd37e5c0-b14b-11e4-b9e3-5bbebfaf3f9d] - page.onError - stack:
(anonymous function) (https://jsta.sh/media/all.js?1459:16)
t (https://jsta.sh/media/all.js?1459:16)
(anonymous function) (https://jsta.sh/media/all.js?1459:17)
(anonymous function) (https://jsta.sh/media/all.js?1459:8)
(anonymous function) (https://jsta.sh/media/all.js?1459:8)
(anonymous function) (https://jsta.sh/media/all.js?1459:8)
I (https://jsta.sh/media/all.js?1459:2)
Run Code Online (Sandbox Code Playgroud)
等等
我希望尽管与其他有关此.bind()问题的问题密切相关,但我的问题对于那些通常希望为其开箱即用的Selenium PhantomJS实现添加功能的人来说非常有用.如果我可以修改由我的Ghostdriver-PhantomJS-Selenium堆栈实现的JavaScript库,而不是直接将es5垫片添加到我访问的每个页面,我会喜欢它,但我不知道我该怎么做或者如果.如果我只是在裸PhantomJS上构建这个测试器而不是通过另一个框架过滤它,那么开始觉得这样的事情会更简单.
我的规格:我在Ubuntu 14.04 LTS(GNU/Linux 3.17.1-elastic x86_64)上通过Python 2.7使用Selenium版本1.43和PhantomJS 1.98.
***当我在phantomjs控制台中使用它时,es5-shim会产生以下有希望的结果:
phantomjs> console.log(Object.keys)
function keys() {
[native …Run Code Online (Sandbox Code Playgroud) 我在测试角度站点时遇到了硒问题。
我尝试等待该元素可点击,并且它通过了。这是我的代码:
public static void insertPublisherName(String publisherName)
{
// BasePage.manuallyKeyboardPressing(Keys.ESCAPE);
// Logger.info("\n ******************* insert publisher name by Xpath: "+ COMPANY_NAME_XPATH +" *\n **************************************************\n");
// BasePage.inputValueByXpath(publisherName,COMPANY_NAME_XPATH);
WebDriver driver2 = WebDriverMgr.getDriver();
driver2.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(driver2,58);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@formcontrolname='publisher_name']")));
WebElement element = driver2.findElement(By.xpath("//input[@formcontrolname='publisher_name']"));
element.click();
element.clear();
element.sendKeys("123465");
}
Run Code Online (Sandbox Code Playgroud)
这是例外:
:ERROR: element click intercepted: Element <input _ngcontent-xni-c24="" autocomplete="off" formcontrolname="publisher_name" nz-input="" placeholder="Enter Publisher Name" class="ant-input ng-untouched ng-pristine ng-valid" ng-reflect-name="publisher_name"> is not clickable at point (1560, 116). Other element would receive the click: …Run Code Online (Sandbox Code Playgroud) 我正在使用JAVA中的Selenium使基于地图的Web应用程序(使用'MapBox')自动化。
将地图作为单个图像检索,我必须在地图中找到不同区域的坐标。
为此,我找到了x&y坐标并执行了点击操作。但是我们确实有不同分辨率的机器来运行脚本。
此时,坐标会发生变化,因此会单击不正确的点(区域)。
请通过对坐标进行归纳来解决此问题,而与机器分辨率无关。
用于单击特定坐标的代码如下:
Actions action = new Actions(getDriver());
action.moveByOffset(xcordinate, ycordinate).click().build().perform(); //coordinates changes as the resolution changes
Run Code Online (Sandbox Code Playgroud) 如何告诉Selenium webdriver在特定元素上等待在css中设置特定属性?
我想等待:
display
通常会等待元素出现,如下所示:
display
我该如何等待display属性的特定css值?
我在我的 android 应用程序中使用 Firebase 作为我的云数据。我正在使用它的 Firestore 和身份验证功能。但是当我尝试注册时,它显示给我:
“发生内部错误。[7:]”
所以,为了解决这个问题,我来寻找解决方案,所以我发现如果我更新google_service.json文件,一切都会好起来的。但是当我更新它时,它有时可以工作,一段时间后它再次向我显示相同的错误。
我正在尝试学习一些加密编码,并生成了当前保存在字节数组( byte[] privatekey )中的 32 字节私钥。我知道公钥是使用secp256k1命名的椭圆曲线参数和公式生成的,其中publickey = G * privatekey,其中 G 是椭圆曲线上的某个点(ECPoint?),但我无法将该命名参数规范和公式转换为实际编码公钥。java.security.*我知道自 java 7 以来,和包中包含一些类java.security.spec.*可以用简短的代码来执行此操作,但我找不到一个很好的示例来说明如何在不使用第三方库的情况下执行此操作。
这个比特币 stackexchange 链接包含所有理论答案以及出色的 python 和 C# 代码,但没有 Java 代码。
编辑/更新:我尝试使用以下代码获取我需要的内容:
String secp256k1_G_uncompressed_string = "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8";
byte[] secp256k1_G_uncompressed_bytes = DatatypeConverter.parseHexBinary(secp256k1_G_uncompressed_string);
String privatekeystring = "1184CD2CDD640CA42CFC3A091C51D549B2F016D454B2774019C2B2D2E08529FD";
byte[] privatekeybytes = DatatypeConverter.parseHexBinary(privatekeystring);
BigInteger secp256k1_G_num = new BigInteger(1, secp256k1_G_uncompressed_bytes);
BigInteger privatekey_num = new BigInteger(1, privatekeybytes);
BigInteger curvepoint = secp256k1_G_num.multiply(privatekey_num);
byte[] publickeybytes = curvepoint.toByteArray();
System.out.println(DatatypeConverter.printHexBinary(privatekeybytes));
System.out.println(DatatypeConverter.printHexBinary(publickeybytes));
Run Code Online (Sandbox Code Playgroud)
应该使用正确编码生成的公钥是这样的:
04d0988bfa799f7d7ef9ab3de97ef481cd0f75d2367ad456607647edde665d6f6 fbdd594388756a7beaf73b4822bc22d36e9bda7db82df2b8b623673eefc0b7495
但正在生成的公钥是这样的:
4E6801418BB6EF9F462F69830F82EB51BB9224219B9D89C8C34FB746297F59779D8B986194181BD7AB99DC7E3086914EA13C4B37E05716CADCA0AE391CE81C4B85E0F09E8 628F0F81692B5D08D0D8B9E20615A5D23DE0F591D02C650554BB1D8
我目前正在使用 Selenium,现在已经进入了有趣但非常困难的 CSS 选择器世界。
我目前正在考虑选择 Google 工具栏的不同选项。例如,当您搜索某些内容时,在结果页面上,您可以选择在图片、新闻、视频等下搜索相同的词
我对选择“图像”链接特别感兴趣。
我已经研究了很长一段时间,我得到的最接近的是以下选择器:
div a.q.qs[href]
Run Code Online (Sandbox Code Playgroud)
这将深入到正确的子类,但有 16 个。尽管进行了数小时的漫无目的搜索,但我无法使用围绕锚文本的 contains 方法完成查询,这在目标子类中是独一无二的。
我知道 Selenium 中有一个 By LinkText 选项,但我不确定锚文本在整个页面中是否唯一。另外,我真的很想了解一般的 CSS 选择器,所以即使是这样,我也想解决这个特定问题,以便我可以将其应用于未来的问题。
我正在寻找类似于以下伪 CSS 选择器的内容:
div a.q.qs[href].Anchorcontains("Images")
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
为什么当我运行以下代码时显示错误消息?我也使用ENTERkey 而不是RETURN,但随后错误显示:
“导入错误:无法从‘selenium.webdriver.common.keys’导入名称‘密钥’”
from selenium import webdriver
from selenium.webdriver.common.keys import keys
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.dr-chuck.com/csev-blog/?s=soup")
print(driver.title)
search = driver.find_element_by_id("s")
search.send_keys("soup")
search.send_keys(keys.RETURN)
try:
main = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "main"))
)
articles = main.find_element_by_tag("article")
for artiicle in articles:
header = article.find_element_by_tag("a")
print(header.text)
finally:
driver.quit()
Run Code Online (Sandbox Code Playgroud) 我想使用firefox或chrome访问包含selenium的页面.当页面加载时,我想从页面下载所有图像,css,dom.我想存储每个图像,比如我在chrome中找到它们 - >工具 - >开发工具 - >资源 - >图像.是否可以通过硒获取并保存所有内容?
到目前为止,我只找到了这个页面,对我没有任何有趣的提示:http: //ldanswers.org/wordpress/zisser/2014/11/24/save-whole-web-page-with-all-resources-in-硒的webdriver /
我找不到任何概述如何初始化 appium android 驱动程序的文档。
我在 appium3.0.0.2和 selenium 上进行了一些测试,3.11但在尝试按类名查找元素时收到以下错误:
OpenQA.Selenium.InvalidSelectorException: 此会话不支持“定位器策略”“css 选择器”
理想情况下,我不想回到旧版本的 selenium,因为我已经有一组使用3.14. 这是我目前的测试,我找不到明确的文档告诉我如何在C#.
public void androidTest(){
AndroidDriver<AndroidElement> driver;
DesiredCapabilities cap = new DesiredCapabilities();
cap.SetCapability("deviceName", "myName");
cap.SetCapability("platformName", "Android");
cap.SetCapability("automationName", "UiAutomator2");
cap.SetCapability("appPackage", "myPackage");
cap.SetCapability("appActivity", "myActivity");
Uri url = new Uri("http://127.0.0.1:4723/wd/hub");
driver = new AndroidDriver<IWebElement>(url, cap);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
driver.FindElementByName("android.widget.EditText").SendKeys("testString");
}
Run Code Online (Sandbox Code Playgroud)
我收到以下两条错误消息
论点1:
不能转换
'System.Uri'为'OpenQA.Selenium.Remote.ICommandExecutor'
论点2:
无法转换
'OpenQA.Selenium.Remote.DesiredCapabilities'为'OpenQA.Selenium.DriverOptions'ArenaTests
我需要向这个构造函数传递什么参数才能使这个设置工作?