我们开发了Chrome扩展程序,我想用Selenium测试我们的扩展程序.我创建了一个测试,但问题是我们的扩展在安装时会打开一个新标签,我想我从另一个标签中得到了一个例外.是否可以切换到我正在测试的活动选项卡?或者另一种选择是从禁用扩展开始,然后登录我们的网站,然后启用扩展.可能吗?这是我的代码:
def login_to_webapp(self):
self.driver.get(url='http://example.com/logout')
self.driver.maximize_window()
self.assertEqual(first="Web Editor", second=self.driver.title)
action = webdriver.ActionChains(driver=self.driver)
action.move_to_element(to_element=self.driver.find_element_by_xpath(xpath="//div[@id='header_floater']/div[@class='header_menu']/button[@class='btn_header signature_menu'][text()='My signature']"))
action.perform()
self.driver.find_element_by_xpath(xpath="//ul[@id='signature_menu_downlist'][@class='menu_downlist']/li[text()='Log In']").click()
self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/div[@class='input']/input[@name='useremail']").send_keys("[email]")
self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/div[@class='input']/input[@name='password']").send_keys("[password]")
self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/button[@type='submit'][@class='atho-button signin_button'][text()='Sign in']").click()
Run Code Online (Sandbox Code Playgroud)
测试失败ElementNotVisibleException: Message: element not visible,因为在新选项卡中(由扩展名打开)"登录"不可见(我认为新选项卡仅在命令后打开self.driver.get(url='http://example.com/logout')).
更新:我发现该例外与额外标签无关,它来自我们的网站.但根据@ aberna的回答,我用这段代码关闭了额外的标签:
def close_last_tab(self):
if (len(self.driver.window_handles) == 2):
self.driver.switch_to.window(window_name=self.driver.window_handles[-1])
self.driver.close()
self.driver.switch_to.window(window_name=self.driver.window_handles[0])
Run Code Online (Sandbox Code Playgroud)
关闭额外标签后,我可以在视频中看到我的标签.
什么是Selenium相当于在Watir中附加现有的浏览器?
brw = Watir::IE.attach(:title, "Google")
Run Code Online (Sandbox Code Playgroud) 由于某些未知原因,我的浏览器非常缓慢地打开了远程服务器的测试页。因此,我在考虑是否可以在退出脚本后重新连接到浏览器,但不执行webdriver.quit()此操作将使浏览器保持打开状态。这可能是HOOK或Webdriver句柄。我查找了硒API文档,但未找到任何功能。我正在使用Chrome 62,x64,Windows 7,硒3.8.0。能否解决这个问题,我将不胜感激。
我正在开发一个应用程序,我们需要检查Web应用程序是否正在运行以及提供预期结果的URL.
我们的Scheduler每天运行12次此应用程序.在每次启动时,firefox驱动程序都会被执行,并打开一个新的浏览器窗口来执行操作.
我想要一种技术,我们打开firefox浏览器一次,并在selenium-driver的每次调用中重用它.
经过大量的搜索后我相信这个功能还没有实现 - 但有没有人知道我用selenium1/2为Java实现的任何解决方法?如果另一个进程启动了浏览器的实例,那么webdriver可以连接到该窗口吗?任何可以尝试的解决方法.任何指针都非常感谢.
谢谢!!
我想将我的 selenium chrome Web 驱动程序启动到当前现有会话。
因此,我尝试通过远程调试进行连接,而不是启动新实例。
所以我所做的是通过cmd在127.0.0.1:6813启动chrome。
C:\Program Files (x86)\Google\Chrome\Application>chrome.exe '127.0.0.1:6813'
Run Code Online (Sandbox Code Playgroud)
一个新的 chrome 实例启动了。
现在,在我的代码中,我使用 chrome 选项添加了 debugger_address="127.0.0.1:6813" 。
chrome_options.debugger_address="127.0.0.1:6813"
Run Code Online (Sandbox Code Playgroud)
但我的 Spyder IDE 出现以下错误:
runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py', wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')
Traceback (most recent call last):
File "<ipython-input-9-77e28441ef9f>", line 1, in <module>
runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py', wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py", line 22, in <module>
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=cpath)
File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 75, in __init__
desired_capabilities=desired_capabilities)
File …Run Code Online (Sandbox Code Playgroud) 我的 MainWindow.xaml 中有一个 ChromiumWebBrowser 控件:
<cefSharp:ChromiumWebBrowser x:Name="chromiumBrowser" Address="https://www.github.com/"/>
Run Code Online (Sandbox Code Playgroud)
我试图通过附加 Selenium ChromeDriver 来驱动它:
ChromeOptions options = new ChromeOptions();
options.BinaryLocation = AppDomain.CurrentDomain.FriendlyName;
options.AddArguments("disable-extensions");
options.AddArguments("disable-plugins");
ChromeDriver chromeDriver = new ChromeDriver(options);
chromeDriver.Url = "http://www.reddit.com";
Run Code Online (Sandbox Code Playgroud)
这是正确的做法吗?它似乎几乎可以工作,因为当驱动程序尝试连接嵌入式控件时,嵌入式控件会闪烁一次,但随后我从 ChromeDriver 控制台收到以下错误:
[1006/220430.356:错误:cache_util_win.cc(21)] 无法移动缓存:访问被拒绝。(0x5) [1006/220430.357:错误:cache_util.cc(139)] 无法将缓存文件夹 GPUCache 移动到 old_GPUCache_000
编辑
显然,使用 options.BinaryLocation 附加驱动程序将不幸地始终启动可执行文件的新实例。从下面的评论中,我了解到正确的方法是通过调试端口附加驱动程序。所以我通过代码创建我的浏览器控件:
CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 9222;
settings.UserDataPath = "C:/Temp";
Cef.Initialize(settings);
browserControl = new ChromiumWebBrowser("chrome://version");
Run Code Online (Sandbox Code Playgroud)
但是当我尝试附加它时:
ChromeOptions options = new ChromeOptions();
options.AddArguments("--remote-debugging-port=9222");
ChromeDriver driver = new ChromeDriver(options);
driver.Url = "http://www.reddit.com";
Run Code Online (Sandbox Code Playgroud)
现在的错误是: System.InvalidOperationException:“会话不是从断开连接创建的:无法连接到渲染器(会话信息:chrome = 85.0.4183.121)(SessionNotCreated)”
这可能是由于 …
wpf selenium selenium-chromedriver chromium-embedded cefsharp
我正在为C#库进行集成测试.我测试的.NET代码中的一个步骤是使用正确的url地址打开Firefox.我的集成测试应该为我的库提供一些数据,等待firefox启动并检查网页是否包含正确的数据.要使用硒,我必须以某种方式附加到由我的库提供的firefox.硒有可能吗?还有其他图书馆可以帮助我吗?
如何使用现有的Firefox实例进行测试?我首先想用手动启动的实例进行一些手动测试然后我想使用现有的浏览器来实现我的自动化脚本.
我只需要像这样从 python 启动 chromedriver :
import undetected_chromedriver as uc
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = uc.Chrome()
driver.get('https://accounts.stockx.com/login')
print("Chrome started")
Run Code Online (Sandbox Code Playgroud)
我的 C# 程序有 100000 行代码,没有时间将所有内容重写为 C#。
我必须像上面显示的代码一样打开 chromedriver。我需要从 C# 代码访问此 chromedriver。我怎样才能做到这一点?
在 C# 中我只是这样做:
ChromeDriver driver;
var chromeOptions = new ChromeOptions();
driver = new ChromeDriver(chromeDriverService,chromeOptions);
Run Code Online (Sandbox Code Playgroud)
问题是:我如何通过 python 启动 chromedriver,然后从 c# 访问该驱动程序?我需要它,因为来自 python 的 chromedriver 无法被验证码检测到。感谢您的进步!
c# python selenium selenium-chromedriver undetected-chromedriver