小编XDS*_*XDS的帖子

HtmlElement.Parent返回错误的父级

我正在尝试通过C#为网页上的随机元素生成CSS选择器.一些背景:

我使用带有WebBrowser控件的表单.导航时可以请求光标下元素的CSS选择器.当然,通过以下方式获取html元素是微不足道的:

WebBrowser.Document.GetElementFromPoint(<Point>);
Run Code Online (Sandbox Code Playgroud)

目标是创建一个'严格'的css选择器,导致光标下的元素,a-la:

html > body > span:eq(2) > li:eq(5) > div > div:eq(3) > span > a
Run Code Online (Sandbox Code Playgroud)

这个选择器基于:eq运算符,因为它意味着由jQuery和/或SizzleJS处理(这两个支持:eq - 原始的CSS选择器没有.赞成@BoltClock帮助我澄清这一点).所以,你得到了图片.为了实现这个目标,我们将检索到的HtmlElement提供给下面的方法,并通过询问我们遇到的每个元素的Parent来开始提升DOM树:

    private static List<String> GetStrictCssForHtmlElement(HtmlElement element)
    {
        List<String> familyTree;
        for (familyTree = new List<String>(); element != null; element = element.Parent)
        {
            string ordinalString = CalculateOrdinalPositionAmongSameTagSimblings(element);
            if (ordinalString == null) return null;

            familyTree.Add(element.TagName.ToLower() + ordinalString);
        }
        familyTree.Reverse();

        return familyTree;
    }

    private static string CalculateOrdinalPositionAmongSameTagSimblings(HtmlElement element, bool simplifyEq0 = true)
    {
        int count = 0;
        int positionAmongSameTagSimblings = -1;
        if (element.Parent …
Run Code Online (Sandbox Code Playgroud)

css c# css-selectors

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

使用@ViewChild获取输入的.nativeElement将返回'undefined'

我在angular2中创建了以下表单:

import {Component, ElementRef, ViewChild, AfterViewInit} from "angular2/core";
import {Observable} from "rxjs/Rx";
import {ControlGroup, Control, Validators, FormBuilder} from "angular2/common";

@Component({
    selector: "ping-pong",
    template: `
                  <form
                     name="someform"                             [ngFormModel]="form">
                      <div class="form-group">
                          <input                                 
                              id="foobar"                        #foobar="ngForm"   <-- without ="ngForm" everything works fine
                              type="text"                        ngControl="foobar"
                              value=""
                              class="form-control"
                          />
                      </div>
                  </form>
              `,
    styles: [`
                  form {
                      width: 300px;
                  }
              `]
})

export class ChangepswdFormComponent implements AfterViewInit {
    @ViewChild("foobar") foobar: ElementRef;
    private form: ControlGroup;

    public constructor(formBuilder: FormBuilder) {
        this.form = formBuilder.group({
            foobar: [""]
        });
    }

    public ngAfterViewInit(): …
Run Code Online (Sandbox Code Playgroud)

forms formbuilder typescript angular

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

更新窗口后,Browser.ExecScript()停止工作

我为WatiN(版本2.1)设置了一个简单的测试平台,其中包括:

var browser = new IE();

browser.GoTo("http://www.google.co.il"); // webpage doesn't matter really
browser.RunScript("alert(123)");
Run Code Online (Sandbox Code Playgroud)

仅当未安装KB3025390时,此方法才有效.安装它会破坏上面的测试,其中包含HRESULT设置为E_ACCESSDENIED的UnAuthorizedAccessException.是什么赋予了?有没有解决方法?

更新:使用IWebBrowser2.Navigate2和"javascript:console.log(123)"类型的脚本工作但是

  • 使用这样的反向通道让我感到不安
  • 通过.Navigate2()的反向通道运行的脚本可能只有大约2070个字符的最大长度(给予或接受),否则它们会被强制截断为此长度,导致尝试运行它们时出现javascript错误
  • 即使使用最简单的脚本,使用.Navigate2()也会阻塞Internet Explorer的就绪状态,因为它将被设置为READYSTATE_LOADING而没有任何摆脱它的希望.简单来说,这意味着一旦你使用这个hack,你要么必须在WatiN中以"dont-wait-for-webpage-to-load"方式执行每一个后续操作(GoToNoWait,ClickNoWait等),以免你的代码冻结等待浏览器返回READYSTATE_COMPLETE(如前所述,这将永远不会出现).
  • 在这里似乎有一个更广泛的问题,我甚至无法访问IHtmlWindow2对象的属性pe window.document再次抛出一个未经授权的异常使得它几乎不可能转移到C#世界的返回值我正在运行的脚本(使用Expando等)来处理window.top.document以外的文件(对于window.top.document窗口,有IWebBrowser2.Document可以解决这个问题)

更新#2:selenium项目的人们也注意到了这个问题:

https://code.google.com/p/selenium/issues/detail?id=8302

还创建了一个错误报告:

https://connect.microsoft.com/IE/feedback/details/1062093/installation-of-kb3025390-breaks-out-of-process-javascript-execution-in-ie11

更新#3:IHTMLWindow2.setInterval和IHTMLWindow2.setTimeout也会抛出UnauthorizedAccess异常.这些方法未标记为已弃用:

http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa741505%28v=vs.85%29.aspx

然而,他们受伤同样的减产同样受伤.

更新#4:我在这篇文章中给出了推荐的方法:

/sf/answers/1298280651/

为了动态调用IHTMLWindow2对象的"eval"方法(或任何其他方法).得到与上面相同的"System.UnauthorizedAccessException".所以也没有喜悦.

Microsoft建议使用"eval"而不是"execscript",但在上述实验之后,我怀疑他们只是在浏览器中引用"eval".

据我所知,到目前为止,当涉及到成熟的IE11 +使用"eval"进程外(通过COM)似乎已被完全禁止以及窗口对象的任何其他函数调用,唯一的例外是上面提到的.Navigate2()的反向通道.

javascript security watin denied

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

实体框架不提供 DeleteAsync 或 AddAsync。为什么?

我只是注意到 EF(此处使用版本 5)不提供DeleteAsync()/ AddAsync()。我还注意到像这样的项目:

https://github.com/zzzprojects/EntityFramework-Plus

做事后提供DeleteAsync()。为什么 EF 不提供DeleteAsync()开箱即用的服务?只是好奇。

附录:正如 EF-Plus 的维护者所指出的,我提到的“DeleteAsync”风格与 EF 的“Delete”/“DeleteAsync”有些不同,因为前者对查询目标元素进行操作,这些元素在db/db-server,而 EF 的 Delete 操作在调用 'Delete()'之前已经检索到的元素。尽管这些方法的签名存在差异,但我的问题引起的最初关注仍然是其优点。

c# sql entity-framework

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

带有 SHA-2 签名的全新 RSA 密钥(由 Puttygen 生成)被 Github 拒绝

我在Windows中使用Gitext,而Windows又使用Putty-Agent(pagegent.exe最新版本当前为0.76)。我也在使用相当新的 git (ver. 2.35.1)

我使用 puttygen.exe 创建了一个带有 SHA-2 的全新 rsa 密钥,并将其添加到我的 Github 帐户中。但是,当 Gittext 尝试将更改推送到远程时,我收到以下错误:

  "C:\Program Files\Git\bin\git.exe" push --recurse-submodules=check --progress "origin" refs/heads/...:refs/heads/...
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights and the repository exists.
  ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type.
  Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.

  Done

  Press Enter or Esc to exit...
Run Code Online (Sandbox Code Playgroud)

目前,我将 rsa-key …

git github git-authentication

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

Newtosoft Json 反序列化:如果给定的 json 字符串具有多于必要的属性,如何抛出错误?

假设我们有以下类:

public class Foo {
      public long Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果给定的 json 字符串是:

{ "Id": 10, "SomethingIrrelevant": "Foobar" }
Run Code Online (Sandbox Code Playgroud)

换句话说,我们希望反序列化非常严格,并在检测到发生此类可疑情况时大发脾​​气。

c# json json.net json-deserialization

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

使用内存进行单元测试.ToListAsync()

以下是由于内存dbset不支持.ToListAsync()而导致的.ShouldNotThrow()测试失败的一种测试(我没有确切的用词,但您知道了)。如果有任何重要意义,我正在尝试模拟Entity Framework ver提供的dbset。6.1.3:

[TestFixture]
public class Tests
{
    private SomeRepository _repository;
    private Mock<DbSet<SomeEntity>> _mockDbSet;
    private Mock<IApplicationDbContext> _mockAppDbContext;

    [OneTimeSetUp]
    public void TestFixtureSetUp()
    {
        _mockDbSet = new Mock<DbSet<SomeEntity>>();
        _mockAppDbContext = new Mock<IApplicationDbContext>();
        _mockAppDbContext.SetupGet(c => c.Gigs).Returns(_mockGigsDbSet.Object);

        _repository = new SomeRepository(_mockAppDbContext.Object);
    }

    [Test]
    public void Test()
    {
        // Setup
        var results = (IEnumerable<SomeEntity>) null;
        var singleEntity = new SomeEntity {Id = "1"};
        _mockDbSet.SetSource(new List<SomeEntity> { singleEntity });

        // Act
        var action = new Func<Task>(async () =>
        {
            results = await _repository.GetMultipleAsync(); //this ends up …
Run Code Online (Sandbox Code Playgroud)

asp.net unit-testing entity-framework

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

用于删除以“.”开头的文件夹的 Powershell 脚本 不起作用 - 为什么?

我编写了一个简单的 powershell 脚本,旨在删除特定文件夹:

gci -include .vs -recurse | remove-item -force -recurse
Run Code Online (Sandbox Code Playgroud)

但是 .vs 文件夹不会被删除(如果点被删除,那么名为“vs”的文件夹就会被删除)。我肯定错过了什么。

$PSVersionTable.PSVersion
Run Code Online (Sandbox Code Playgroud)

返回报告:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  666
Run Code Online (Sandbox Code Playgroud)

我通过文件资源管理器“右键单击 -> 运行 Powershell 脚本”运行脚本。不知道这是否会使脚本在最新最好的 powershell 版本下运行。

更新:

事实证明,罪魁祸首是 .vs 文件夹被标记为“只读”。由于某种原因,即使确实指定了“-force”标志,powershell 脚本也无法删除它。对此有什么可以做的吗?

windows shell powershell scripting

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

Visual Studio 按键绑定相当于 VSCode 上的 Control + Shift + P,以便聚焦“搜索无处不在的文本框”

我试图找到将焦点传递到全局搜索文本框的按键绑定,但无济于事:

全球搜索框

VisualStudio 没有像 VSCode 中的“Ctrl + Shift + P”这样的按键绑定吗?我错过了什么吗?

visual-studio visual-studio-code visual-studio-2019

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

Grafana Docker 镜像:更改匿名用户的默认角色

我在 localdev 上运行 Grafana,我不想一直使用管理员凭据登录。为此,我创建了以下 docker-compose:

 version: "3"
 
 services:
 
   grafana:
     image: grafana/grafana:8.3.5
     ports:
       - "3010:3000"
     environment:
       - GF_AUTH_ANONYMOUS_ENABLED=true
     volumes:
        ...
Run Code Online (Sandbox Code Playgroud)

这适用于允许匿名用户获得访问权限,但处于仅查看/只读模式。我想为匿名用户启用上帝模式:

/sf/answers/3582170091/

是否有一些环境变量或类似的东西可以让我达到预期的结果。我想避免引入我自己的“defaults.ini”只是为了设置“org_role = Editor”

grafana

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