[英]C# Selenium/ChromeDriver Add User Profile Preference
使用 selenium + chrome 驅動程序運行測試時,我需要允許所有 cookies。
我正在嘗試使用ChromeOptions.AddUserProfilePreference將其添加為配置文件首選項
我不是 100% 確定首選項名稱應該是什么以允許所有 cookies。我已經引用了這個文檔https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc?view =標記
並在我的設置中嘗試了以下方法,但沒有達到預期的效果。
options.AddUserProfilePreference("profile.block_third_party_cookies", false);
options.AddUserProfilePreference("security.cookie_behavior", 0);```
這是我的設置代碼
new DriverManager().SetUpDriver(new ChromeConfig());
var options = new OpenQA.Selenium.Chrome.ChromeOptions { };
options.AddArgument("–no-sandbox");
options.AddArguments("-disable-gpu");
options.AddArguments("-disable-dev-shm-usage");
options.AddArgument("-incognito");
options.AddArgument("-start-maximized");
options.AddUserProfilePreference("security.cookie_behavior", 0);
CurrentWebDriver = new ChromeDriver(options);
我遇到了同樣的問題。 我發現使用以下內容對我有幫助:
options.AddUserProfilePreference("profile.cookie_controls_mode", 0);
幫助我找到這個的建議是檢查 Chrome 首選項文件(在我的例子中C:\Users\<user>\AppData\Local\Google\Chrome\User Data\Default\Preferences
)。 我保存了一份 cookies 被阻止的副本,然后將設置更改為允許所有 cookies 並比較了兩個版本,這為我突出顯示了受影響的控件。
看起來在 Chrome v86 中默認禁用第三方 cookies: Chromium SameSite Updates 。
我找到了在瀏覽器新標簽起始頁啟用第三方 cookies 的解決方法(我正在使用inputsimulator 庫打開新標簽,因為其他方法無法打開相應的頁面)。
這是 IWebDriver 擴展的 C# 代碼:
using WindowsInput;
using WindowsInput.Native;
public static void EnableThirdPartyCookies(this IWebDriver driver)
{
var windowHandles = driver.WindowHandles;
// Activate Browser window
driver.SwitchTo().Window(driver.WindowHandles.Last());
// Open New Tab Ctrl + T
new InputSimulator().Keyboard.ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_T);
// Wait for open new tab
const int retries = 100;
for (var i = 0; i < retries; i++)
{
Thread.Sleep(100);
if (driver.WindowHandles.Count > windowHandles.Count)
break;
}
// Enable Third Party Cookies
if (driver.WindowHandles.Count > windowHandles.Count)
{
driver.Close();
driver.SwitchTo().Window(driver.WindowHandles.Last());
var selectedCookieControlsToggle = driver.FindElements(By.Id("cookie-controls-toggle"))
.FirstOrDefault(x => x.GetAttribute("checked") != null);
selectedCookieControlsToggle?.Click();
}
}
使用:
var chromeService = ChromeDriverService.CreateDefaultService();
var options = new ChromeOptions { };
options.AddArgument("–no-sandbox");
options.AddArgument("-incognito");
options.AddArgument("-start-maximized");
var driver = new ChromeDriver(chromeService, options);
driver.EnableThirdPartyCookies();
這是 Java 代碼:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public void enableThirdPartyCookies(WebDriver driver) throws Exception {
ArrayList<String> windowHandles = new ArrayList<String> (driver.getWindowHandles());
// Activate Browser window
driver.switchTo().window(driver.getWindowHandle());
// Open New Tab Ctrl + T
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_CONTROL);
// Wait for open new tab
int retries = 100;
for (int i = 0; i < retries; i++)
{
Thread.sleep(100);
if (driver.getWindowHandles().size() > windowHandles.size())
break;
}
// Enable Third Party Cookies
if (driver.getWindowHandles().size() > windowHandles.size())
{
driver.close();
windowHandles = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(windowHandles.get(windowHandles.size() - 1));
List list = driver.findElements(By.id("cookie-controls-toggle"));
Optional<WebElement> selectedCookieControlsToggle = driver.findElements(By.id("cookie-controls-toggle")).stream()
.filter(x -> x.getAttribute("checked") != null).findFirst();
Optional.ofNullable(selectedCookieControlsToggle).get().get().click();
}
}
使用:
ChromeOptions options = new ChromeOptions();
options.addArguments("–no-sandbox");
options.addArguments("incognito");
options.addArguments("start-maximized");
WebDriver driver = new ChromeDriver(options);
enableThirdPartyCookies(driver);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.